如何使用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
答案 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();