Symfony doctrine orderby and group by(distinct)

时间:2017-01-05 11:57:01

标签: mysql sql symfony orm doctrine-orm

我正在尝试获取最新预订的课程(独特)。我在Doctrine querybuilder中尝试了以下内容:

$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子句中并包含   nonaggregated column ...不是   功能上依赖于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]:常规错误:3065 ORDER BY子句的表达式#1   不在SELECT列表中,引用列...不在SELECT中   列表;这与DISTINCT

不兼容

现在我已经搜索了解决方案,并且基本上找到了许多禁用ONLY_FULL_GROUP_BY的建议。 Disable ONLY_FULL_GROUP_BY

有些评论指出,为了遵守sql标准,这样做是不明智的。那怎么可能以一种有效的方式实现呢?

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方式:

wkhtmltopdf --footer-center [page]/[topage] www.google.com /tmp/foobar.pdf

您只会获得每门课程ID最高的预订,因此无需按课程分组。