वाक्पटु - जहाँ नहीं के बराबर


110

मैं वर्तमान में नवीनतम लारवेल संस्करण का उपयोग कर रहा हूं।

मैंने निम्नलिखित प्रश्नों की कोशिश की है:

Code::where('to_be_used_by_user_id', '<>' , 2)->get()
Code::whereNotIn('to_be_used_by_user_id', [2])->get()
Code::where('to_be_used_by_user_id', 'NOT IN', 2)->get()

आदर्श रूप से, इसे छोड़कर सभी रिकॉर्ड वापस आ जाना चाहिए user_id = 2, लेकिन यह खाली सरणी देता है। मैं इससे कैसे निपटूं?

Code::all()

यह सभी 4 रिकॉर्ड लौटाता है।

कोड मॉडल:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Code extends Model
{

    protected $fillable = ['value', 'registration_id', 'generated_for_user_id', 'to_be_used_by_user_id', 'code_type_id', 'is_used'];

    public function code_type()
    {
        return $this->belongsTo('App\CodeType');
    }

}

जवाबों:


215

के whereसाथ !=संयोजन में एक ऑपरेटर के साथ प्रयोग करेंwhereNull

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get()

1
यह NULL रिकॉर्ड्स की अनदेखी कर रहा है। अगर मैं NULL में से एक को 2 के अलावा कुछ गैर-NULL आईडी में बदल देता हूं, तो वह रिकॉर्ड वापस आ जाता है। 'इट' से मेरा मतलब है MySQL।
अभिजीत

लापरवाह रहो, यह एक जाल है।
येवगेनी अफानसेयेव

23

इसके where field not emptyलिए मेरे लिए काम किया:

->where('table_name.field_name', '<>', '')

14

जबकि यह काम करने लगता है

Code::query()
    ->where('to_be_used_by_user_id', '!=' , 2)
    ->orWhereNull('to_be_used_by_user_id')
    ->get();

आपको इसे बड़े तालिकाओं के लिए उपयोग नहीं करना चाहिए, क्योंकि एक सामान्य नियम के रूप में "या" जहां आपके खंड सूचकांक का उपयोग करने के लिए क्वेरी रोक रहा है। आप "कुंजी खोज" से "पूर्ण टेबल स्कैन" पर जा रहे हैं

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

इसके बजाय, संघ का प्रयास करें

$first = Code::whereNull('to_be_used_by_user_id');

$code = Code::where('to_be_used_by_user_id', '!=' , 2)
        ->union($first)
        ->get();

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.