#laravel #laravel-5 #eloquent
#laravel #laravel-5 #красноречивый
Вопрос:
У меня есть SQL-запрос, который мне нужно преобразовать в Eloquent, и я понятия не имею, где написать МАКСИМАЛЬНЫЕ условия. Как возможно преобразовать его без большого количества необработанного sql? Спасибо!
SELECT bike_id
FROM bike_filters
GROUP BY bike_id
HAVING
MAX(bike_category_id in (416,11111)) = 1
AND MAX(bike_category_id in (5555,779)) = 1
AND MAX(bike_category_id in (5555,772)) = 1
Структура таблицы:
| id | bike_id | bike_category_id |
| 1 | 3 | 416 |
| 2 | 3 | 779 |
| 3 | 3 | 344 |
| 4 | 3 | 332 |
| 5 | 4 | 444 |
| 5 | 5 | 555 |
Цель этого запроса — получить bike_id
s, у которого есть все параметры по запросу — у bike может быть 20 фильтров, но если пользователь выполняет поиск по 5 и bike им соответствует, мы получаем bike_id по этому запросу.
Ответ №1:
Для этого вы могли бы использовать havingRaw(), который выглядел бы примерно так:
$query = DB::table('bike_filters')
->select('bike_id')
->groupBy('bike_id')
->havingRaw('MAX(bike_category_id in (416,11111)) = 1')
->havingRaw('MAX(bike_category_id in (5555,779)) = 1')
->havingRaw('MAX(bike_category_id in (5555,772)) = 1')
->get();