首页 > 解决方案 > 如何使用 laravel 雄辩的`when`而不是 if-elseif 来获得两个值的条件

问题描述

我怎样才能转换这个:

if(isset($from) && isset($to))
{
    $query->where('column1', $from)->where('column2', $to);
}
elseif(isset($from))
{
    $query->where('column1', $from);
}
elseif(isset($to))
{
    $query->where('column1', $to);
}

when在 Laravel 中使用这样的东西:

...
->when(isset($from) && isset($to), function($query) use ($from, $to)
{
    $query->where('column1', $from)->where('column2', $to);
})
->elseWhen(isset($from), function($query) use ($from)
{
    $query->where('column1', $from)->where('column2', $from);
})
->elseWhen(isset($to), function($query) use ($to)
{
    $query->where('column2', $to);
});

谢谢

标签: laravelif-statementeloquent

解决方案


你可以这样做when

...
->when(isset($from), function($query) use ($from)
{
    return $query->where('column1', $from);
})
->when(isset($to), function($query) use ($to)
{
    return $query->where('column2', $to);
});

在这种情况下,如果设置了两个值,那么您将首先获得完全相同的结果,如果条件:)


推荐阅读