如何用Eloquent检查"if not null"?

Mar*_*lln 197 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
Run Code Online (Sandbox Code Playgroud)

小智 365

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

Model::whereNotNull('sent_at')
Run Code Online (Sandbox Code Playgroud)

Laravel 3:

Model::where_not_null('sent_at')
Run Code Online (Sandbox Code Playgroud)

  • `whereNotNull()`方法(以及之前未记录的其他几个方法)被添加到5.1版的文档中:http://laravel.com/docs/5.1/queries#where-clauses. (12认同)
  • 另一个[未记录](http://laravel.com/docs/4.2/queries)功能.好吧,除非你算上API文档,但Laravel的主要文档没有提到它. (7认同)

Ati*_*qur 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 
Run Code Online (Sandbox Code Playgroud)

或者在模型中使用范围:

public function scopeNotNullOnly($query){

    return $query->where('status_message', '<>', '');
}
Run Code Online (Sandbox Code Playgroud)

  • “和”代表什么? (2认同)

小智 12

我们可以用

Model::whereNotNull('sent_at');
Run Code Online (Sandbox Code Playgroud)

或者

Model::whereRaw('sent_at is not null');
Run Code Online (Sandbox Code Playgroud)


小智 7

laravel 5.4中,此代码Model::whereNotNull('column')无法正常工作,您需要get()像这样添加这个代码,Model::whereNotNull('column')->get();这对我来说效果很好。


Jon*_*Jon 7

如果您想使用数据库外观:

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


Roc*_*e33 7

我看到这个问题有点老了,但我遇到了它寻找答案。虽然我在这里的答案没有成功,但我认为这可能是因为我使用的是PHP 7.2Laravel 5.7。或者可能是因为我只是在 CLI 上使用 Laravel Tinker 处理一些数据。

我尝试了一些对我有用的方法,而另一些则没有,我希望能帮助其他人。


我没有成功运行:

    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();    // []
Run Code Online (Sandbox Code Playgroud)

以上所有都为我返回了一个空数组


但是,我确实成功运行了:

    DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]
Run Code Online (Sandbox Code Playgroud)

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