[laravel] Eloquent-같지 않은 곳

현재 최신 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');
    }

}



답변

사용 where!=함께 연산자whereNull

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


답변

들어 where field not empty이 나를 위해 일한 :

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


답변

이것이 작동하는 것 같지만

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

일반적으로 where 절에서 “or”는 인덱스를 사용하는 쿼리를 중지하므로 큰 테이블에는 사용하지 않아야합니다. “키 조회”에서 “전체 테이블 스캔”으로 이동합니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

대신 Union을 사용해보십시오

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

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


답변

또는 다음과 같이 :

Code::whereNotIn('to_be_used_by_user_id', [2])->get();


답변