MySQL查询,其中column是特定值或任何值

时间:2018-09-12 10:03:26

标签: mysql laravel

并非专门针对Laravel问题,但我正在使用Laravel查询生成器。我有一个MySQL数据库列,其中包含一长串状态。过滤列表时,我只是将一个或多个状态作为数组传递给查询...

$statusArray = ['active','inProgress'];

DB::table('mytable')->whereIn('status', $statusArray)->get();

但是,当不过滤时,我希望返回所有状态,所以我希望有类似...

 $statusArray = [*];

是否有一种简单的方法来处理此问题,还是需要为查询动态构建whereIn子句?

2 个答案:

答案 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();