Как вы проверяете" если не 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

7 ответов


красноречивый имеет метод для этого (Laravel 4.*/5.*);

Model::whereNotNull('sent_at')

фреймворк Laravel 3:

Model::where_not_null('sent_at')

Если кто-то вроде меня хочет сделать это с помощью Query builder в 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');

в laravel 5.4 эта модель кода:: whereNotNull ('column') не работала, вам нужно добавить get (), как эта модель::whereNotNull('column')->get (); это отлично работает для меня:)


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

Если вы хотите искать удаленную запись (мягкую удаленную запись), Не выполняйте запрос модели пользователя. Вместо этого используйте запрос Db:: table например Вместо использования ниже:

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

использование:

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