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', '<>', '');
}
답변
답변
사용할 수있다
Model::whereNotNull('sent_at');
또는
Model::whereRaw('sent_at is not null');
답변
나는이 질문이 약간 오래되었지만 답을 찾기 위해 그것을 뛰어 넘었다. 여기서 답변 을 얻지 못했지만 PHP 7.2 및 Laravel 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();