过滤值时的Laravel条件子句
Posted
技术标签:
【中文标题】过滤值时的Laravel条件子句【英文标题】:Laravel conditional clause when for filtering value 【发布时间】:2019-03-17 08:44:52 【问题描述】:我有一个状态为 o 或 1 的事件表。
我必须过滤状态为 1,0 或 ALL 的事件。
当条件子句时我尝试使用 laravel,它不能使用零值,其他条件正在工作。
$status = Input::get('status');
$events = DB::table('events')
->select('events.*')
->when($status, function ($query) use ($status)
return $query->where("events.status",$status);
)
->get();
【问题讨论】:
试试$status = Input::get('status') ? 1 : 0;
。状态参数可能是一个字符串,您只需要两个选项 1 和 0(用户可以更改状态参数)
您是否阅读了laravel.com/docs/master/queries 的文档?它指出“when 方法仅在第一个参数为 true 时执行给定的 Closure。如果第一个参数为 false,则不会执行 Closure。”
【参考方案1】:
when
方法中使用的in_array
函数试试这个
因为 0(zero) 意味着 (false) 默认理解所以尝试在 when 方法中使用内部函数
如果没有通过状态,则将默认值设置为
2
或任何数字,但不是0,1 and null
$status = Input::has('status') ? Input::get('status') : 2;
$events = DB::table('events')->select('events.*')
->when(in_array($status,[0,1]), function ($query) use ($status)
return $query->where("events.status",$status);
)->get();
第二种方式创建一个新函数
function checkStatus($status,$array)
if(isset($status))
return in_array($status,$array);
return false;
$events = DB::table('events')->select('events.*')
->when(checkStatus($status,[0,1]), function ($query) use ($status)
return $query->where("events.status",$status);
)->get();
【讨论】:
从events
中选择events
.*,其中events
.status
为空;当我没有通过值时得到这个
我在过滤器部分使用它,如果没有通过状态,那么查询应该在没有 where 条件的情况下工作,否则使用 0 或 1
@Rp9 也通过创建新函数并检查以第二种方式使用以上是关于过滤值时的Laravel条件子句的主要内容,如果未能解决你的问题,请参考以下文章
LARAVEL 5.8 - 在 foreach 中使用数组的 WHERE LIKE 子句的多个条件没有给出完整的结果