সুস্পষ্ট - যেখানে সমান নয়


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
এটি নুল রেকর্ডকে উপেক্ষা করছে। যদি আমি 2 টি ব্যতীত অন্য কোনও NUL আইডিতে NULL গুলি পরিবর্তন করি তবে সেই রেকর্ডটি ফিরে আসবে। 'এটি' দ্বারা, আমার অর্থ মাইএসকিউএল।
a bhijit

সাবধান থাকুন, এটি একটি ফাঁদ।
ইয়েভেগেনি আফানসিয়েভ

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();

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.