Запрос к базе данных в Yii2, содержащий HAVING, COUNT, CASE и IN
Как при помощи класса yii\db\Query сформулировать следующий запрос SQL:
SELECT `dish`.*
FROM `dish`
INNER JOIN `consist` ON `dish`.`id` = `consist`.`dish_id`
GROUP BY `dish`.`id`
HAVING COUNT(
CASE WHEN `consist`.`ingredient_id` NOT IN (19, 20, 21) OR `consist`.`hidden` = 1 THEN 1
ELSE NULL
END
) = 0
Поясню, что тут происходит. Из таблицы блюд (dish) нужно выбрать те блюда, которые содержат только определённый набор ингредиентов (в данном случае это 19, 20, 21, но этот набор может меняться), и не содержат другие ингредиенты. При этом ни один ингредиент не должен быть спрятан (hidden). ingredient - таблица ингредиентов, consist - таблица сочетаний блюд и ингредиентов.