Mysql Symfony条令依据和分组依据(不同)

Mysql Symfony条令依据和分组依据(不同),mysql,sql,symfony,orm,doctrine-orm,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') ->

我正在尝试获取最新预订的课程(独特)。我已使用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 of ORDER BY子句不在GROUP BY子句中,并且包含 非聚集列。。。但事实并非如此 功能上依赖于GROUP BY子句中的列;这是 与sql\u模式不兼容=仅\u完整\u组\u由500个内部服务器 错误-驱动器异常

我还尝试了以下方法:

$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 不在“选择”列表的“引用”列中。。。哪个不在选择中 列表这与不同的标准不兼容

现在我已经搜索了解决方案,基本上找到了很多建议,只禁用“完整”组


一些评论指出,为了遵守sql标准而这样做是不明智的。那么,这是如何做到的呢?

您可以尝试以下方法:

$query = $repository->createQueryBuilder('b')
->select('(b.course) AS course')
->leftJoin('AppBundle:Booking', 'b2', 'WITH', 'b.course = b2.course AND b.id < b2.id)
->where('b2.id IS NULL')
->orderBy('b.id', 'DESC')
->setMaxResults(5)
->getQuery();
$query=$repository->createQueryBuilder('b')
->选择(‘(b.课程)作为课程’)
->leftJoin('AppBundle:Booking','b2','WITH','b.course=b2.course和b.id其中('b2.id为NULL')
->订货人('b.id','DESC')
->setMaxResults(5)
->getQuery();

您将只获得每个课程id最大的预订,因此无需按课程分组。

您可以尝试以下方法:

$query = $repository->createQueryBuilder('b')
->select('(b.course) AS course')
->leftJoin('AppBundle:Booking', 'b2', 'WITH', 'b.course = b2.course AND b.id < b2.id)
->where('b2.id IS NULL')
->orderBy('b.id', 'DESC')
->setMaxResults(5)
->getQuery();
$query=$repository->createQueryBuilder('b')
->选择(‘(b.课程)作为课程’)
->leftJoin('AppBundle:Booking','b2','WITH','b.course=b2.course和b.id其中('b2.id为NULL')
->订货人('b.id','DESC')
->setMaxResults(5)
->getQuery();

您将只获得每个课程id最大的预订,因此无需按课程分组。

您可以提供有关实体的更多信息吗?它们是如何映射的?(我猜是多通单向的)多通双向的,因为级联移除,因为没有课程预订就不可能存在。你能提供更多关于实体的信息吗?它们是如何映射的?(我猜是多通单向的)多通双向的,因为级联删除,因为没有courseLeft连接预订就不可能存在。对于每个b/b2对,b.id