CASE через ORM laravel

Как из данных

id | market | day | isOpen
1      ya      1       1
2      ya      2       0 
3      ya      3       1
...

Можно получить

id | market | monday | thuesday | wensday ...
   1     ya       1         0          1

Максимально используя ORM laravel

Пока что есть голый sql запрос

SELECT market,
SUM(CASE WHEN day = 1 and isOpen THEN 1 ELSE 0 END) AS Monday,
SUM(CASE WHEN day = 2 and isOpen THEN 1 ELSE 0 END) AS Thuesday,
SUM(CASE WHEN day = 3 and isOpen THEN 1 ELSE 0 END) AS Wednesday
FROM markets
GROUP BY market

Но хотелось бы чтобы он был универсальным и подходил под разные базы


Ответы (1 шт):

Автор решения: Максим К

Предполагается, что есть модель Market:

$res = Market::select('market')
    ->selectRaw('SUM(CASE WHEN day = 1 and isOpen THEN 1 ELSE 0 END) AS Monday')
    ->selectRaw('SUM(CASE WHEN day = 2 and isOpen THEN 1 ELSE 0 END) AS Thuesday')
    ->selectRaw('SUM(CASE WHEN day = 3 and isOpen THEN 1 ELSE 0 END) AS Wednesday')
    ->groupBy('market');
→ Ссылка