2016-04-02 12 views
16

मैं एक मेज इस तरह है:Laravel सुवक्ता जहां क्षेत्र एक्स या रिक्त है

table 
- field1: tinyint 
- field2: varchar (nullable) 
- datefield: timestamp (nullable) 

अब मैं सभी प्रविष्टियों जहां फ़ील्ड 1 1 है प्राप्त करना चाहते हैं, field2 रिक्त है और एक्स या नल की तुलना में छोटे जहां datefield है। मैंने पहले ही ऐसा कुछ करने की कोशिश की है:

$query = Model::where('field1', 1) 
      ->whereNull('field2') 
      ->where('datefield', '<', $date) 
      ->orWhereNull('datefield'); 

लेकिन यह काम नहीं कर रहा है। मैं हमेशा प्रत्येक प्रविष्टि प्राप्त करता हूं जहां डेटफील्ड शून्य है। इससे कोई फर्क नहीं पड़ता कि अन्य फ़ील्ड क्या हैं। मैंने इसे 2 प्रश्नों में विभाजित करने का भी प्रयास किया: सबसे पहले प्रत्येक पंक्ति प्राप्त करें जहां डेटफील्ड एक्स या नल से छोटा है और फिर (इसके आधार पर) फ़ील्ड 1 है और फ़ील्ड 2 शून्य है।

परिणाम वही था। कोई विचार यह कैसे करना है?

उत्तर

32

ऐसा लगता है कि आपको advanced where clauses का उपयोग करने की आवश्यकता है।

यह देखते हुए कि field1 और field2 में खोज निरंतर है, हम उन्हें छोड़ देंगे, लेकिन हम आपकी खोज को datefield में थोड़ा समायोजित करने जा रहे हैं।

इस प्रयास करें:

$query = Model::where('field1', 1) 
    ->whereNull('field2') 
    ->where(function ($query) { 
     $query->where('datefield', '<', $date) 
      ->orWhereNull('datefield'); 
    } 
); 

क्या तुमने कभी एक प्रश्न डिबग और देखो क्यों यह काम नहीं कर रहा करने के लिए की जरूरत है, यह क्या एसक्यूएल यह वास्तव में निष्पादित हो रहा है देखने के लिए कर सकते हैं। एसक्यूएल उत्पन्न करने के लिए आप अपनी वाक्प्रचार क्वेरी के अंत में ->toSql() चेन कर सकते हैं।

+0

इससे मुझे कुछ निराशा बचाई! धन्यवाद। –

+0

इसे कुछ ऐसा किया जा सकता है जैसे: WhereIn ('कॉलम', ['value', null])? – MASh

+0

@MASh सुनिश्चित नहीं है। मैंने इसे कुछ समय पहले लिखा था और उस समय यह सबसे अच्छा तरीका था। क्यों न इसे एक प्रयास दें? – James

संबंधित मुद्दे