我有数组(arr
) n 元素, n = 1或2,以及名为employees
的数据库中的表,其中包含两个字段(name
和surname
)
我想使用 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]%')
即,在arr
或name
字段中查找给定的surname
元素。
答案 0 :(得分:1)
您必须使用Advanced Where Clauses来WHERE
进行分组(就像您使用括号一样):
$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准备好的语句。