我有一个使用以下方法获取数据的存储库函数:
public function get($request){
return User::where($request)->get();
}
$request
数组是动态的。只要我传入常规键值对,上述方法就可以正常工作:
$request = array(
'name' => 'mike',
'age' => 45
);
以上转换为此SQL:
SELECT *
FROM users
WHERE name = 'mike' AND age = 45;
每隔一段时间,我想传入一个数组作为$request
的一个属性:
$request = array(
'name' => 'mike',
'age' => array(45, 46)
)
并将其转换为以下SQL:
SELECT *
FROM users
WHERE name = 'mike' AND age IN(45, 46);
在$request
中设置为数组的任何属性都应被视为where in
语句,而不是vanilla where
语句。
我该怎么做?
答案 0 :(得分:1)
这应该很好地处理......
public function get($request)
{
$query = User::query();
foreach ($request as $key => $value) {
if (is_array($value)) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
}
}
return $query->get();
}
答案 1 :(得分:0)
您需要使用whereIn语句,例如:
User::where(['name' => 'jhon'])->whereIn(['age' => [45, 46])->get();
答案 2 :(得分:0)
查看when()
方法https://laravel.com/docs/master/queries#conditional-clauses
在你的情况下,它将是:
public function get($request)
{
$query = User::newQuery();
foreach ($request as $key => $value) {
$query->when(is_array($value), function($query)
{
return $query->whereIn($key, $value);
}, function($query) use($key, $value)
{
return $query->where($key, $value);
});
}
return $query->get();
}