如何用Eloquent检查“if not null”?

时间:2014-01-22 11:20:42

标签: laravel eloquent

如何使用Eloquent检查字段是否为空

我尝试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

8 个答案:

答案 0 :(得分:326)

Eloquent有一种方法(Laravel 4。* / 5. *);

Model::whereNotNull('sent_at')

Laravel 3:

Model::where_not_null('sent_at')

答案 1 :(得分:17)

如果像我这样的人想要在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', '<>', '');
}

答案 2 :(得分:5)

如果您想使用DB facade

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

答案 3 :(得分:2)

我们可以使用

Model::whereNotNull('sent_at');

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

答案 4 :(得分:0)

在laravel 5.4中这段代码Model :: whereNotNull('column')不起作用你需要像这样添加get()一个Model :: whereNotNull('column') - &gt; get();这个适用于我:)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我看到这个问题有点老了,但是我遇到了这个问题寻找答案。尽管我在这里的答案没有成功,但我认为这可能是因为我使用的是 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(); // [ ... ]

这按我的预期在数组中返回了所有结果。注意:如果愿意,您可以放下all()并取回 Illuminate \ Database \ Eloquent \ Collection 而不是数组。

答案 7 :(得分:-9)

如果要搜索已删除的记录(软删除记录),请勿使用Eloquent Model Query。 而是使用Db :: table查询 例如 而不是使用下面:

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

使用:

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