Я пытаюсь получить последние забронированные курсы (уникальные). Я попытался следующий с QueryBuilder Doctrine:Symfony doctrine orderby и группа от (отличная)
$repository = $this->getDoctrine()->getRepository('AppBundle:Booking');
$query = $repository->createQueryBuilder('b')
->select('(b.course) AS course')
->orderBy('b.id', 'DESC')
->groupBy('b.course')
->setMaxResults(5)
->getQuery();
без OrderBy он работает, но он будет пересекать бронирования по возрастанию. Мне нужны последние забронированные курсы. С помощью этого запроса я получаю эту ошибку:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ... which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 500 Internal Server Error - DriverException
Я также попытался следующие:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT DISTINCT c.id
FROM AppBundle:Booking b
JOIN b.course c
ORDER BY b.id DESC'
);
SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column ... which is not in SELECT list; this is incompatible with DISTINCT
Теперь я искал решений и в основном нашел много предложений, чтобы отключить ONLY_FULL_GROUP_BY. Disable ONLY_FULL_GROUP_BY
Некоторые комментарии указывают на то, что нецелесообразно делать это, чтобы соответствовать стандартам sql. Тогда как это возможно так, как это работает?
Можете ли вы предоставить более подробную информацию о своих лицах? Как они отображаются? (Я угадываю ManyToOne однонаправленный) – OlivierC
ManyToOne двунаправленный, из-за каскадного удаления, так как заказы не могут существовать без курса – DaViDa