如何检查字段是否为雄辩不为空?
我试着模型::(‘sent_at’,‘不是’,DB::生(“空”))- >…但它给出了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
您也可以使用原始查询。
记住:报告是我的模型,我使用原始,原始查询的最好的事情是,你可以使用多种类型的操作符,如and,或等,只是作为一个字符串传递。
例如:WHERE condition1 AND condition2 AND condition3…;
Reports::whereRaw("column1 IS NOT NULL AND column2 IS NOT NULL");
上面的查询将以如下方式执行:
从列不为空和列2不为空的报告中选择*。
为了更多地理解IS Null和IS not Null操作符:
https://www.w3schools.com/sql/sql_and_or.asp
如果像我这样的人想用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
或与scope in model:
public function scopeNotNullOnly($query){
return $query->where('status_message', '<>', '');
}
我知道这个问题有点老了,但我在寻找答案时偶然发现了它。虽然我在这里没有成功的答案,但我想这可能是因为我使用的是PHP 7.2和Laravel 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(); // []
所有这些都为我返回了一个空数组
然而,我确实在跑步方面取得了成功:
DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]
这将像我预期的那样在数组中返回所有结果。注意:如果你愿意,你可以放弃all()并返回一个Illuminate\Database\Eloquent\Collection而不是数组。