【发布时间】:2017-05-19 23:08:17
【问题描述】:
我正在尝试获取最新预订的课程(唯一)。我使用 Doctrine 查询构建器尝试了以下操作:
$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]:语法错误或访问冲突:1055 表达式 #1 ORDER BY 子句不在 GROUP BY 子句中并且包含 非聚合列...不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 500 内部服务器不兼容 错误 - 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]:一般错误:ORDER BY 子句的 3065 表达式 #1 不在 SELECT 列表中,引用列...不在 SELECT 中 列表;这与 DISTINCT 不兼容
现在我已经搜索了解决方案,基本上找到了很多禁用 ONLY_FULL_GROUP_BY 的建议。 Disable ONLY_FULL_GROUP_BY
一些 cmets 指出,为了遵守 sql 标准,这样做是不明智的。那么这怎么可能以一种可行的方式实现呢?
【问题讨论】:
-
您能否提供有关您的实体的更多信息?它们是如何映射的? (我猜是 ManyToOne 单向的)
-
ManyToOne 双向,因为级联删除,因为没有课程就无法预订
标签: mysql sql symfony orm doctrine-orm