आप एलोकेंट के साथ "यदि नहीं तो अशक्त" कैसे जांचें?


218

आप कैसे चेक करते हैं कि एलोकेंट के साथ कोई फील्ड अशक्त तो नहीं है ?

मैंने कोशिश की Model::where('sent_at', 'IS NOT', DB::raw('null'))->...लेकिन यह IS NOTतुलना के बजाय एक बंधन के रूप में देता है ।

इसके DB::getQueryLog()बारे में यही कहता है:

  'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
  'bindings' => 
    array (size=3)
      0 => string 'IS NOT' (length=6)
      1 => int 1
      2 => int 4

आप !=IS NOT के बजाय प्रयोग करने का प्रयास कर सकते हैं ।
JaTochNietDan

1
@JaTochNietDan! = ऑपरेटर NULL मानों के साथ काम नहीं करता है। प्रति MySQL प्रलेखन : "आप इस तरह के =, <, या <> शून्य के लिए परीक्षण करने के लिए के रूप में गणित तुलना ऑपरेटरों का उपयोग नहीं कर सकते।"
रात १२:१६

जवाबों:


402

एलोकेंट में उसके लिए एक विधि है (लारवेल 4। * / 5. *);

Model::whereNotNull('sent_at')

लारवेल 3:

Model::where_not_null('sent_at')

1
मुझे हटाए गए क्षेत्र में नल की जांच करने की आवश्यकता है, इसलिए मैंने इसे बदल दिया whereNull('deleted_at')और मुझे अपनी क्वेरी चल रही है।
तरुण

7
एक और अघोषित सुविधा। ठीक है, जब तक आप एपीआई डॉक्स की गिनती नहीं करते हैं, लेकिन लारवेल के मुख्य दस्तावेज इसका कोई उल्लेख नहीं करते हैं।
सकल जूल

12
whereNotNull()विधि (और कई अन्य कि पहले undocumented थे) संस्करण 5.1 में प्रलेखन किया गया था: laravel.com/docs/5.1/queries#where-clauses
बेन जॉनसन

@ सकल लेकिन क्वेरी बिल्डर में, एलोकेंट में नहीं (
लारवेल

@pmiranda का मतलब यह नहीं है कि आपका क्या मतलब है, लेकिन मेरी टिप्पणी 4 साल पहले की थी और Laravel 4 के बारे में, आजकल हम Laravel 6 में हैं। मुझे लगता है कि स्थिति बदल गई है। हालांकि लारवेल का मुख्य प्रलेखन अभी भी बहुत पूर्ण नहीं है, लेकिन यह गाइड के एक समूह की तरह लगता है।

20

यदि मेरे जैसा कोई व्यक्ति इसे Laravel 5.2.23 में क्वेरी बिल्डर के साथ करना चाहता है, तो इसे इस तरह किया जा सकता है ->

 $searchResultQuery = Users::query(); 
 $searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
 $searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null 

या मॉडल में गुंजाइश के साथ:

public function scopeNotNullOnly($query){

    return $query->where('status_message', '<>', '');
}

1
क्या 'and'खड़ा है?
सेंटी

1
वास्तव में यहाँ 'और' कुछ भी नहीं करता है, लेकिन अगर ऐसा होता है तो पहला पैरामीटर एक सरणी होगा। यहाँ विधि प्रोटोटाइप है: public function where($column, $operator = null, $value = null, $boolean = 'and'); और स्थान -".....\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php"
Atiqur


4

हम प्रयोग कर सकते हैं

Model::whereNotNull('sent_at');

या

Model::whereRaw('sent_at is not null');

4

मैं देख रहा हूं कि यह सवाल थोड़ा पुराना है, लेकिन मैं इसका जवाब तलाशता हुआ भाग गया। हालाँकि मुझे यहाँ उत्तरों के साथ सफलता नहीं मिली, लेकिन मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि मैं PHP 7.2 और Laravel 5.7 पर हूँ या संभव है क्योंकि मैं सिर्फ लारवेल टिंकर का उपयोग करके सीएलआई के कुछ आंकड़ों के साथ खेल रहा था।

मेरे पास कुछ ऐसी चीजें हैं जो मैंने कोशिश कीं जो मेरे लिए और दूसरों के लिए काम कीं, ऐसा नहीं था कि मुझे आशा है कि दूसरों को मदद मिलेगी।


मुझे सफलता नहीं मिली:

    MyModel::whereNotNull('deleted_by')->get()->all();             // []
    MyModel::where('deleted_by', '<>', null)->get()->all();        // []
    MyModel::where('deleted_by', '!=', null)->get()->all();        // []
    MyModel::where('deleted_by', '<>', '', 'and')->get()->all();   // []
    MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
    MyModel::where('deleted_by', 'IS NOT', null)->get()->all();    // []

उपरोक्त सभी ने मेरे लिए एक खाली सरणी लौटा दी


हालाँकि मुझे सफलता मिली थी:

    DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]

जैसा कि मुझे उम्मीद थी कि यह एक परिणाम में सभी परिणाम लौटाता है। नोट: यदि आप ड्रॉप कर सकते हैं all()और एक वापस पाने रोशन \ डाटाबेस \ सुवक्ता \ संग्रह यदि आप पसंद करते एक सरणी के बजाय।



-11

यदि आप हटाए गए रिकॉर्ड (सॉफ्ट हटाए गए रिकॉर्ड) को खोजना चाहते हैं, तो उपयोगकर्ता मॉडल मॉडल क्वेरी को न खोएं। इसके बजाय नीचे का उपयोग करने के बजाय Db :: तालिका क्वेरी का उपयोग करें:

$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();

उपयोग:

$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();

इस जवाब का सवाल से कोई लेना-देना नहीं है। इसके अलावा, आपको Db::tableनरम हटाए गए रिकॉर्ड को खोजने के लिए उपयोग करने की आवश्यकता नहीं है । आप उन्हें विधि के साथ फ़िल्टर कर सकते हैं withTrashed(), जैसे डॉक्स में कहा है: laravel.com/docs/5.3/eloquent
gvsrepins
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.