[laravel] Eloquent로 “null이 아닌 경우”를 어떻게 확인합니까?

Eloquent 에서 필드 가 null이 아닌지 어떻게 확인 합니까?

나는 시도 Model::where('sent_at', 'IS NOT', DB::raw('null'))->...했지만 IS NOT비교 대신 바인딩으로 제공합니다 .

이것에 대해 DB::getQueryLog()말합니다 :

  'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
  'bindings' => 
    array (size=3)
      0 => string 'IS NOT' (length=6)
      1 => int 1
      2 => int 4



답변

Eloquent는이를위한 방법을 가지고 있습니다 (Laravel 4. * / 5. *).

Model::whereNotNull('sent_at')

라 라벨 3 :

Model::where_not_null('sent_at')


답변

나와 같은 사람이 Laravel 5.2.23의 쿼리 작성기를 사용하여 수행하려는 경우 다음과 같이 수행 할 수 있습니다.

 $searchResultQuery = Users::query();
 $searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
 $searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null 

또는 모델 범위가있는 경우 :

public function scopeNotNullOnly($query){

    return $query->where('status_message', '<>', '');
}


답변

DB 파사드 를 사용하려는 경우 :

DB::table('table_name')->whereNotNull('sent_at')->get();


답변

사용할 수있다

Model::whereNotNull('sent_at');

또는

Model::whereRaw('sent_at is not null');


답변

나는이 질문이 약간 오래되었지만 답을 찾기 위해 그것을 뛰어 넘었다. 여기서 답변 을 얻지 못했지만 PHP 7.2Laravel 5.7을 사용 하고 있기 때문일 수 있습니다 . Laravel Tinker를 사용하여 CLI의 일부 데이터를 가지고 놀았 기 때문에 가능합니다.

나는 내가 시도한 것들과 다른 사람들을 도울 희망이없는 다른 것들을 가지고있다.


나는 성공을 거두지 못했습니다.

    MyModel::whereNotNull('deleted_by')->get()->all();             // []
    MyModel::where('deleted_by', '<>', null)->get()->all();        // []
    MyModel::where('deleted_by', '!=', null)->get()->all();        // []
    MyModel::where('deleted_by', '<>', '', 'and')->get()->all();   // []
    MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
    MyModel::where('deleted_by', 'IS NOT', null)->get()->all();    // []

위의 모든 것이 빈 배열을 반환했습니다.


그러나 나는 성공을 거두었 다.

    DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]

이것은 예상대로 배열의 모든 결과를 반환했습니다. 참고 : 원하는 경우 배열을 삭제하고 배열 대신 Illuminate \ Database \ Eloquent \ Collection을all() 다시 가져올 수 있습니다 .


답변

laravel 5.4 이 코드를 Model::whereNotNull('column')추가 할 필요가 작동하지 않는 get()이와 같은 Model::whereNotNull('column')->get();이 사람이 나를 위해 잘 작동합니다.


답변

삭제 된 레코드 (소프트 삭제 된 레코드)를 검색하려면 Eloquent Model Query를 사용하지 마십시오. 대신 Db :: table 쿼리를 사용하십시오 (예 : 아래 대신 사용).

$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();

사용하다:

$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();