Если бы был postgres - можно было бы проще:
1) implode массив через запятую
2) в запросе написать "<что-то> = any (cast('{:str}' as integer[]))"
3) Забиндить в :str строку из пункта 1
Andrew Lynx, Это алиасы - короткие альтернативные наименования. У вас таблица products - я ее в from обозвал "p" для удобства и использовал ее данные(p.category) в условии join. Таблицу main_menu обозвал "c" и использовал ее данные в группировке и при выборке
но зачем? у вас же есть id из max(t1.id). Это и есть ваш последний id который соответствует условиям. если вам надо - сделайте алиас. select max(t1.id) as id
А вообще, MySQL видимо пытается интерпретировать выражение без аггрегирующих функций и группировок как DISTINCT...
EVOSandru6, закомментируйте всю команду,поднимите контейнер. Зайдите в контейнер и поищите кандидата на установку. Возможно он php7-pgsql. Я не пробовал с данными контейнер собирать. Если у вас там голый sql-дамп, то да,так.
EVOSandru6, pgsql должен быть автоматом включен. Проверить можно php -m в контейнере.
Volume для БД? С этим не подскажу, я разворачиваю структуру БД, подкладывая ее в /docker-entrypoint-initdb.d/
Про ORM не знаю.
На второй вопрос могу ответить так
select *
from cars c
join car_orders co on co.id_car = c.id
where c.id not in (
select id from car_orders where start_end_range && daterange('2018-01-01', '2018-01-02')
)
Обычный индекс. При вставке/обновлении, грубо говоря, вычисляет результат и складывает в индекс значение/ссылку на запись. При выборке в условии надо писать то выражение, на которое навешан индекс.
Если не углубляться во внутренности - примерно так.