Мне было поручено добавить в отчет новый столбец с критериями, которые возвращают новое значение столбца в зависимости от условий. Кажется, это идеальное использование предложения CASE:
Код: Выделить всё
select *,
CASE
WHEN check_out_time >= now() + INTERVAL 25 HOUR THEN "Requires Attention"
WHEN (
SELECT count(*)
FROM shift_activities
WHERE shift_id = `shifts`.`id`
) shifts()
->with("customers", "activities")
->get();
Используя расширение laravel-eloquent-case, легко добавить CASE, который представляет собой простое сравнение:
Код: Выделить всё
$open_shifts = $client->shifts()
->with('caregiver', 'activities')
->case(function (CaseBuilder $case) {
$case->when('checked_out_time', '>=', 'INTERVAL 25 HOUR')->then('Requires Attention')
->else('Complete');
}, 'VisitStatus')
->get();
Но поскольку у меня есть один, который использует счетчик (*) объединяющей таблицы, он работает не так хорошо. Это вызывает постоянные ошибки, и я не понимаю, как лучше всего использовать эту библиотеку. Какие еще варианты мне нужно использовать в Eloquent CASE/WHEN или мне следует просто использовать здесь Raw SQL?
Подробнее здесь:
https://stackoverflow.com/questions/786 ... a-subquery