迭代数组的元素以使用Laravel Eloquent高级WHERE子句执行查询

时间:2016-06-26 13:46:47

标签: mysql laravel-5 eloquent

我有数组arr n 元素, n = 1或2,以及名为employees的数据库中的表,其中包含两个字段(namesurname

我想使用 Eloquent (以及可能的某种迭代?)来执行以下查询,以便实现"即时搜索"功能性:

select * from employees
where (name LIKE '%arr[0]%' AND surname LIKE '%arr[1]%')
OR
where (name LIKE '%arr[1]%' AND surname LIKE '%arr[0]%')

编辑:要更清楚地说明我的问题,如果arr中只有 只有一个元素 ,我希望执行以下查询:

select * from employees
where (name LIKE '%arr[0]%' AND surname LIKE '%arr[0]%')

即,在arrname字段中查找给定的surname元素。

1 个答案:

答案 0 :(得分:1)

您必须使用Advanced Where ClausesWHERE进行分组(就像您使用括号一样):

$arr = ['Some', 'Name'];
$employees = Employee::where(function($query) use ($arr) {
                 $query->where('name', 'LIKE', '%' . $arr[0] . '%')
                       ->where('surname', 'LIKE', '%' . $arr[1] . '%');
             })->orWhere(function($query) use ($arr) {
                 $query->where('name', 'LIKE', '%' . $arr[1] . '%')
                       ->where('surname', 'LIKE', '%' . $arr[0] . '%');
             })->get();

产生查询:

select * from `employees` where (`name` LIKE ? and `surname` LIKE ?) or (`name` LIKE ? and `surname` LIKE ?)

?将作为参数传递给laravel准备好的语句。