并非专门针对Laravel问题,但我正在使用Laravel查询生成器。我有一个MySQL数据库列,其中包含一长串状态。过滤列表时,我只是将一个或多个状态作为数组传递给查询...
$statusArray = ['active','inProgress'];
DB::table('mytable')->whereIn('status', $statusArray)->get();
但是,当不过滤时,我希望返回所有状态,所以我希望有类似...
$statusArray = [*];
是否有一种简单的方法来处理此问题,还是需要为查询动态构建whereIn
子句?
答案 0 :(得分:3)
Yo可以使用“ when”条件子句。这将帮助您在满足条件时向查询中添加其他条件,而在不满足条件时跳过条件。 (在您的情况下,要应用过滤器
查看此处:https://laravel.com/docs/5.7/queries#conditional-clauses
答案 1 :(得分:3)
如果要查看垂直状态,请将其添加到$ statusArray
$statusArray = ['active','inProgress'];
如果要获取所有状态,请声明$statusArray
为空数组
$statusArray = array();
然后像下面这样雄辩地添加条件
DB::table('mytable')->when(!empty($statusArray), function($q, $statusArray) {
return $q->whereIn('status', $statusArray);
})->get();