У меня есть массив (arr
) с n элементами, n = 1 или 2 и таблица strong> в базе данных под названием 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
.
1 ответ
Вы должны использовать расширенные предложения Where, которые позволяют группировать WHERE
s (как и в круглых скобках):
$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.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.
arr
содержит ровно два элемента, но в случае, если есть только один элемент (или возможно более двух в будущей версии), вы получите «неопределенное смещение» ErrorExceptionWHERE
, а не четыре, но когда он получает более двух значений, это может создать много запросов, если вы хочу проверить все возможные комбинации.