Как сделать Eloquent запрос для Group by, с HAVING и MAX - PullRequest
0 голосов
/ 31 марта 2019

У меня есть SQL-запрос, который мне нужно преобразовать в Eloquent, и я не знаю, где писать условия MAX. Как это можно конвертировать без большого Raw 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, который имеет все параметры запроса - велосипед может иметь 20 фильтров, но если пользователь выполняет поиск по 5 и велосипед соответствует им, мы получаем bike_id по этому запросу.

1 Ответ

0 голосов
/ 31 марта 2019

Для этого вы можете использовать withRaw () , который будет выглядеть примерно так:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...