Laravel 5 / Eloquent - 处理Dynamic Where方法输入中的数组参数

时间:2016-11-03 19:57:39

标签: laravel laravel-5 eloquent laravel-5.2

我有一个使用以下方法获取数据的存储库函数:

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语句。

我该怎么做?

3 个答案:

答案 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();
}