$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);
}
答案 0 :(得分:1)
怎么样?
$query->whereIn('column', is_array($search_val) ? $search_val : [$search_val]);
答案 1 :(得分:1)
我认为这个问题有一些有趣的方面需要回答才能形成正确的答案。
whereIn
函数可以采用标量(即非数组)值吗?
从Laravel's code here开始,它不会处理标量值。所以这意味着我们必须提供一个数组 - 因此意味着上面的 Case 1 将不起作用。
可以使用if
/ else
语句来确定使用whereIn
或where
的位置吗?
当然!但是当函数的实际有用性不增加一位时,函数的长度(就行数而言)最终会增长。
你可以在一行中完成:
$query->whereIn('column', is_array($search_val) ? $search_val : [$search_val]);
这让事情略显整洁。但我的猜测是,最终你可能会比你更喜欢这种检查结束(或许在其他地方)。事实上,这可以被视为code smell。
修复问题的根源
我的建议是修复问题的根源 - 返回数组或标量值的函数或代码片段。使它始终返回一个数组。如果它只是一个值,则将其转换为单元素数组。