使用单个数组传递多个WHERE条件(使用LIKE)

时间:2015-01-17 21:25:32

标签: php laravel eloquent where sql-like

理论

It's been discussed可以使用以下代码将多个WHERE子句传递给Laravel的Eloquent中的单where()方法:

$condition = array('field_1' => 'value_1', 'field_2' => 'value_2');
$users = User::where($conditon)->get();

上面的代码只是将数组的键值对与AND链接起来,生成:

SELECT * FROM `users` WHERE field_1 = value_1 AND field_2 = value_2;

问题

以上基于相等性的键值对。 是否可以对字符串使用相同的实现,而不是=我们使用LIKE

我的意思的抽象例子:

$condition = array(
                array('field_1', 'like', '%value_1%'),
                array('field_2', 'like', '%value_2%')
             );
$users = User::where($conditon)->get();

这肯定可以通过多次使用->where(...)来完成。但是,传递单个数组是否可行?

1 个答案:

答案 0 :(得分:15)

不,不是真的。但内部Laravel也只是用循环来做。

Illuminate\Database\Query\Builder@where

if (is_array($column))
{
    return $this->whereNested(function($query) use ($column)
    {
        foreach ($column as $key => $value)
        {
            $query->where($key, '=', $value);
        }
    }, $boolean);
}

我建议你这样做:

$condition = array(
                'field_1' => '%value_1%',
                'field_2' => '%value_2%'
             );

$users = User::where(function($q) use ($condition){
    foreach($condition as $key => $value){
        $q->where($key, 'LIKE', $value);
    }
})->get();