Красноречивый - где не равно

111

В настоящее время я использую последнюю версию Laravel.

Я пробовал следующие запросы:

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

}
aBhijit
источник

Ответы:

216

Используйте whereс !=оператором в сочетании сwhereNull

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get()
Лукасгейтер
источник
1
Он игнорирует записи NULL. Если я изменю одно из значений NULL на идентификатор, отличный от NULL, отличный от 2, эта запись будет возвращена. Под этим я подразумеваю MySQL.
aBhijit
Будьте осторожны, это ловушка.
Евгений Афанасьев
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();

вы не должны использовать его для больших таблиц, потому что, как правило, "или" в вашем предложении where останавливает запрос для использования индекса. Вы переходите от «Поиск ключа» к «полному сканированию таблицы».

введите описание изображения здесь введите описание изображения здесь

Вместо этого попробуйте Union

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

$code = Code::where('to_be_used_by_user_id', '!=' , 2)
        ->union($first)
        ->get();
Евгений Афанасьев
источник
3

Или вот так:

Code::whereNotIn('to_be_used_by_user_id', [2])->get();
Младен Янетович
источник
он не получает нулевые данные
Имран Хоссейн