एक रिकॉर्ड मौजूद है, तो Laravel जाँच


257

मैं लारवेल के लिए नया हूं। कृपया नौसिखिया प्रश्न का बहाना करें लेकिन रिकॉर्ड मौजूद होने पर मुझे कैसे पता चलेगा?

$user = User::where('email', '=', Input::get('email'));

यदि $userकोई रिकॉर्ड है तो मैं यहां क्या कर सकता हूं ?


2
अच्छी तरह से शुरू करने के लिए आपको एक $ उपयोगकर्ता क्वेरी पर एक findOrFail () या समान निष्पादित करने की आवश्यकता है
मार्क बेकर

9
यह वास्तव में मदद नहीं करता है
बेन

1
फिर यह क्या करता है? यह मदद क्यों नहीं करता है? $user = User::where('email', '=', Input::get('email'));बस एक क्वेरी बनाता है $user, आपको उस क्वेरी को निष्पादित करना होगा। findOrFail()उस क्वेरी को निष्पादित करने का एक तरीका है। get()एक और तरीका होगा, firstOrFail()एक और
मार्क बेकर

2
यदि कोई सुझाव "वास्तव में मदद नहीं करता है" तो यह कहने की कोशिश करें कि यह वास्तव में मदद क्यों नहीं करता है, क्योंकि इसका मतलब है कि हम जानते हैं कि उस सुझाव को कैसे सुधारें / बदलें
मार्क बेकर

इस पर विचार करें i.imgur.com/ulqyOiw.png पहिए को फिर से मजबूत करने की कोई जरूरत नहीं है
nikoss

जवाबों:


565

यह निर्भर करता है कि आप उपयोगकर्ता के साथ काम करना चाहते हैं या केवल जाँच करें कि क्या मौजूद है।

यदि आप उपयोगकर्ता ऑब्जेक्ट का उपयोग करना चाहते हैं यदि यह मौजूद है:

$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

और अगर आप केवल जाँच करना चाहते हैं

if (User::where('email', '=', Input::get('email'))->count() > 0) {
   // user found
}

या यहां तक ​​कि अच्छे

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}

20
यदि आप exists()एक गैर-मौजूद रिकॉर्ड के खिलाफ कहते हैं, तो यह त्रुटि देता है:Call to a member function exists() on null
Volatil3

36
@ Volatil3 आप कुछ गलत कर रहे हैं। आपके द्वारा पहले से ही क्वेरी चलाने के बाद आप कॉल नहीं कर सकते
lukasgeiter

7
@lukasgeiter का अनुमान है कि आप सही हैं। मैंने पहले ही कहा थाfirst()
Volatil3

1
मुझे लगता है कि यदि उपयोगकर्ता मौजूद है तो यह खोजने का बेहतर तरीका है। उपयोगकर्ता :: जहां ('ईमेल', '=', 'मूल्य') -> गिनती ()> 0;
जनक पुष्पकुमारा

1
@ Volatil3 मैंने अभी परीक्षण किया है -> मौजूद है () लार्वा 5.5 के साथ, यह झूठा कहता है यदि यह मौजूद नहीं है।
पीज़वाक

26

सबसे अच्छा समाधान में से एक firstOrNewया firstOrCreateविधि का उपयोग है । प्रलेखन दोनों बारे में अधिक जानकारी नहीं है।


5
प्रश्न को फिट नहीं करते हुए, अभी भी, बहुत उपयोगी कार्य। दोनों के बीच अंतर यह है कि firstOrNew है को दर्शाता मॉडल कहा जाता का एक उदाहरण है, जबकि firstOrCreate तुरन्त पूछे मॉडल की बचत होती है, ताकि आप firstOrCreate'd मॉडल पर अद्यतन परिवर्तन की जरूरत है।
गोकिगूक्स

हां, या इसके बारे में सोचने का एक और तरीका है, पहले ऑर्क्रीट का उपयोग करें यदि आप एक बार में सभी विशेषताओं को पास कर सकते हैं (दूसरे पैरामीटर का उपयोग करें), लेकिन पहली ऑरेवन यदि आप बचत से पहले और तर्क की आवश्यकता के लिए जा रहे हैं।
विलियम टरेल

21
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

1
यह स्वीकृत उत्तर होना चाहिए। इसे करने का सबसे कुशल और समर्पित तरीका है exists()
रोबो रोबोक

12
if($user->isEmpty()){
    // has no records
}

वाक्पटु संग्रह का उपयोग करता है। निम्नलिखित लिंक देखें: https://laravel.com/docs/5.4/eloquent-collections


2
हाँ, लेकिन इसका एक संग्रह नहीं लौट रहा है। यह एक एकल मॉडल ऑब्जेक्ट लौटा रहा है जैसा कि आप मानेंगे कि प्रत्येक उपयोगकर्ता के पास एक अद्वितीय है emailजिससे ->isEmpty()एक त्रुटि होगी।
user3574492

और क्या होगा अगर मुझे निम्नलिखित त्रुटि मिलती है:Call to a member function isEmpty() on null
Pathros

6
if (User::where('email', 'user@email.com')->first())
    // It exists
else
    // It does not exist

उपयोग करें first(), न count()कि यदि आपको केवल अस्तित्व की जांच करने की आवश्यकता है।

first()है तेजी से , क्योंकि यह जबकि एक भी मैच के लिए जाँच करता count()मायने रखता है सभी मैचों।


5

लार्वा लूप में, डिफ़ॉल्ट रूप से मौजूद है () विधि, उदाहरण के बाद देखें।

if(User::where('id', $user_id )->exists()){ // your code... }


4

लारवेल 5.6.26 वी

प्राथमिक कुंजी (ईमेल या आईडी) के माध्यम से मौजूदा रिकॉर्ड खोजने के लिए

    $user = DB::table('users')->where('email',$email)->first();

फिर

      if(!$user){
             //user is not found 
      }
      if($user){
             // user found 
      }

उपयोक्ता की तरह उपर्युक्त क्वेरी का उपयोग करके "यूबी का उपयोग करें" और तालिका का नाम उपयोगकर्ता बहुवचन बन गया


3

यह जाँच करेगा कि उपयोगकर्ता तालिका में अनुरोधित ईमेल मौजूद है या नहीं:

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}

1

आपके नियंत्रक में

$this->validate($request, [
        'email' => 'required|unique:user|email',
    ]); 

आपके विचार में - पहले से मौजूद संदेश प्रदर्शित करें

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

सबसे अच्छा उपाय! लेकिन मुझे टेबल का नाम बदलने और ईमेल कॉलम का नाम जोड़ने की आवश्यकता है:required|unique:users,email|email
marcelo2605

1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

कोशिश / पकड़ने के साथ काम करेगा

-> प्राप्त () अभी भी एक खाली सरणी लौटाएगा



0

यह जानना आसान है कि कोई रिकॉर्ड है या नहीं

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";


0

आप लारवेल सत्यापन का उपयोग कर सकते हैं।

लेकिन यह कोड भी अच्छा है:

$user = User::where('email',  $request->input('email'))->count();

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";

0

यह जाँच करेगा कि क्या विशेष ईमेल पता तालिका में मौजूद है:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}

0

कथन के nullभीतर जाँच ifकरने से क्वेरी समाप्त होने के तुरंत बाद लारवेल को 404 लौटने से रोकता है।

if ( User::find( $userId ) === null ) {

    return "user does not exist";
}
else {
    $user = User::find( $userId );

    return $user;
}

ऐसा लगता है कि यदि उपयोगकर्ता पाया जाता है तो यह दोहरी क्वेरी चलाता है, लेकिन मुझे कोई अन्य विश्वसनीय समाधान नहीं मिल सकता है।


आप के findसाथ बदल सकता है whereUser::where(id, 1)->first()
एडगर ऑर्टेगा

0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

के रूप में लिखा जा सकता है

if (User::where('email', '=', Input::get('email'))->first() === null) {
   // user doesn't exist
}

यह एक अस्थायी चर निर्दिष्ट किए बिना सही या गलत वापस आ जाएगा यदि आप मूल कथन में $ उपयोगकर्ता का उपयोग कर रहे हैं।


0

मुझे लगता है कि नीचे तरीका उसी को प्राप्त करने का सबसे सरल तरीका है:

    $user = User::where('email', '=', $request->input('email'))->first();
    if ($user) {
       // user doesn't exist!
    }

0

डीबी टेबल पर दिए गए रिकॉर्ड आईडी मौजूद हैं या नहीं, यह जांचने के लिए नीचे विधि (खुद के लिए) बनाया गया है।

private function isModelRecordExist($model, $recordId)
{
    if (!$recordId) return false;

    $count = $model->where(['id' => $recordId])->count();

    return $count ? true : false;
}

// To Test
$recordId = 5;
$status = $this->isModelRecordExist( (new MyTestModel()), $recordId);

घर यह मदद करता है!


0

सबसे आसान तरीका है

    public function update(Request $request, $id)
{


    $coupon = Coupon::where('name','=',$request->name)->first(); 

    if($coupon->id != $id){
        $validatedData = $request->validate([
            'discount' => 'required',   
            'name' => 'required|unique:coupons|max:255',      
        ]);
    }


    $requestData = $request->all();
    $coupon = Coupon::findOrFail($id);
    $coupon->update($requestData);
    return redirect('admin/coupons')->with('flash_message', 'Coupon updated!');
}

0

Laravel 6 या शीर्ष पर: तालिका का नाम लिखें, फिर उदाहरण के लिए जहां क्लॉज कंडीशन दें, जहां ('आईडी', $ रिक्वेस्ट> आईडी)

 public function store(Request $request)
    {

        $target = DB:: table('categories')
                ->where('title', $request->name)
                ->get()->first();
        if ($target === null) { // do what ever you need to do
            $cat = new Category();
            $cat->title = $request->input('name');
            $cat->parent_id = $request->input('parent_id');
            $cat->user_id=auth()->user()->id;
            $cat->save();
            return redirect(route('cats.app'))->with('success', 'App created successfully.');

        }else{ // match found 
            return redirect(route('cats.app'))->with('error', 'App already exists.');
        }

    }

0

यह जाँचने का कारगर तरीका कि रिकॉर्ड मौजूद है या नहीं, क्वेरी के विरुद्ध जाँचने के लिए is_null विधि का उपयोग करना चाहिए।

नीचे दिया गया कोड सहायक हो सकता है:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}

-1

सबसे कम काम करने के विकल्प:

// if you need to do something with the user 
if ($user = User::whereEmail(Input::get('email'))->first()) {

    // ...

}

// otherwise
$userExists = User::whereEmail(Input::get('email'))->exists();

-1

यहाँ कुछ लिंक के बारे में सोचा जा रहा है जो https://laraveldaily.com/dont-check-record-exists-methods-orcreate-ornew/ की सहायता कर सकता है।



-12

यह ईमेल को चेक करने के लिए सरल कोड मौजूद है या डेटाबेस में नहीं है

    $ डेटा = $ अनुरोध-> सभी ();
    $ उपयोगकर्ता = DB :: तालिका ('उपयोगकर्ता') -> प्लक ('ईमेल') -> toArray ();
    अगर (in_array ($ उपयोगकर्ता, $ डेटा [ 'ई-मेल']))
    {
    गूंज 'अस्तित्व में ईमेल';
    }


8
यदि आपके पास एक तालिका है, तो उपयोगकर्ता ... 1 लाख से अधिक रिकॉर्ड्स कहिए, आप लंबे समय तक एक
वीरानी की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.