Fasih - di mana tidak sama dengan

110

Saya saat ini menggunakan versi Laravel terbaru.

Saya sudah mencoba pertanyaan berikut:

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

Idealnya, ini harus mengembalikan semua catatan kecuali user_id = 2, tetapi mengembalikan larik kosong. Bagaimana cara mengatasinya?

Code::all()

Ini mengembalikan semua 4 catatan.

Model kode:

<?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');
    }

}
aBhijit
sumber

Jawaban:

216

Gunakan wheredengan !=operator dalam kombinasi denganwhereNull

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get()
lukasgeiter
sumber
1
Ini mengabaikan catatan NULL. Jika saya mengubah salah satu NULL ke beberapa id non-NULL selain 2, catatan itu dikembalikan. Yang saya maksud dengan 'itu' adalah MySQL.
aBhijit
Hati-hati, ini jebakan.
Yevgeniy Afanasyev
23

Untuk where field not emptyini berhasil bagi saya:

->where('table_name.field_name', '<>', '')
Abduhafiz
sumber
14

Meskipun ini sepertinya berhasil

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

Anda tidak boleh menggunakannya untuk tabel besar, karena sebagai aturan umum "atau" di klausa where Anda menghentikan kueri untuk menggunakan indeks. Anda beralih dari "Pencarian kunci" ke "pemindaian tabel lengkap"

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Sebagai gantinya, coba Union

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

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

Atau seperti ini:

Code::whereNotIn('to_be_used_by_user_id', [2])->get();
Mladen Janjetovic
sumber
itu tidak mengambil data null
Imran Hossain