我应该在使用whereIn()时使用if-else吗?

时间:2018-04-19 01:20:23

标签: php laravel

$search_val是具有两个或更多值的数组。但是当$search_val只有一个值时,$search_val不是数组。它将是数字。

在这种情况下,我应该使用if-else吗?

case1:不使用if-else

$query->whereIn('column', $search_val);

case2:if-else

if (is_array($search_val)) {
  $query->whereIn('column', $search_val);
} else {
  $query->where('column', $search_val);
}

2 个答案:

答案 0 :(得分:1)

怎么样?

$query->whereIn('column', is_array($search_val) ? $search_val : [$search_val]);

答案 1 :(得分:1)

我认为这个问题有一些有趣的方面需要回答才能形成正确的答案。

whereIn函数可以采用标量(即非数组)值吗?

Laravel's code here开始,它不会处理标量值。所以这意味着我们必须提供一个数组 - 因此意味着上面的 Case 1 将不起作用。

可以使用if / else语句来确定使用whereInwhere的位置吗?

当然!但是当函数的实际有用性不增加一位时,函数的长度(就行数而言)最终会增长。

你可以在一行中完成:

$query->whereIn('column', is_array($search_val) ? $search_val : [$search_val]);

这让事情略显整洁。但我的猜测是,最终你可能会比你更喜欢这种检查结束(或许在其他地方)。事实上,这可以被视为code smell

修复问题的根源

我的建议是修复问题的根源 - 返回数组或标量值的函数或代码片段。使它始终返回一个数组。如果它只是一个值,则将其转换为单元素数组。