Symfony Doctrine采用最新的对象结果:Having子句

时间:2018-06-15 12:12:20

标签: symfony doctrine

我正在尝试从我的数据库中获取最新文档,我已创建此queryBuilder以获取文档obeject但是当我添加条款Having时似乎无法正常工作。
这是我的疑问:

    $qb = $this->createQueryBuilder('sm');

    $qb
        ->andWhere('sm.supplier = :supplier')
        ->setParameter('supplier', $supplierId)
        ->andHaving('MAX(sm.createdAt)')
        ->groupBy('sm.id');
    return $qb->getQuery()->getOneOrNullResult();

这是我得到的例外:

  

{“code”:500,“message”:“[语法错误]第0行,第1行:错误:预期   =,<,< =,<>,>,> =,!=,得到了字符串的结尾。“}

我的DQL
"SELECT sm FROM SupplierBundle\\Entity\\SupplierMedia sm WHERE sm.supplier = :supplier AND sm.type = :type GROUP BY sm.id HAVING MAX(sm.createdAt)"

2 个答案:

答案 0 :(得分:1)

HAVING表达式定义将在WHEREGROUP BY之后应用于结果集的条件。

如果您只需要从表格应用限制和订单中获取最后一条记录。

答案 1 :(得分:1)

要获得每个供应商的最新对象,您可以使用自联接方法

SELECT a 
FROM  SupplierBundle\Entity\SupplierMedia a
    LEFT JOIN SupplierBundle\Entity\SupplierMedia b 
    WITH a.supplier = b.supplier 
    AND a.createdAt < b.createdAt
WHERE b.createdAt IS NULL
AND a.supplier = :supplier 
AND a.type = :type

Doctrine Query Language get Max/Latest Row Per Group