Symfony原则采用最新的客体结果:Having子句
我试图从我的数据库中获取最近的文档,我创建了这个Symfony原则采用最新的客体结果:Having子句,symfony,doctrine,Symfony,Doctrine,我试图从我的数据库中获取最近的文档,我创建了这个queryBuilder来获取文档object,但是当我添加子句Having 这是我的问题: $qb = $this->createQueryBuilder('sm'); $qb ->andWhere('sm.supplier = :supplier') ->setParameter('supplier', $supplierId) ->andHaving('
queryBuilder
来获取文档object
,但是当我添加子句Having
这是我的问题:
$qb = $this->createQueryBuilder('sm');
$qb
->andWhere('sm.supplier = :supplier')
->setParameter('supplier', $supplierId)
->andHaving('MAX(sm.createdAt)')
->groupBy('sm.id');
return $qb->getQuery()->getOneOrNullResult();
这是我得到的一个例外:{“代码”:500,“消息”:“[语法错误]第0行,第1列:错误:应为 =,=,!=,得到字符串结尾。“} 这是my
DQL
:
“从SupplierBundle\\Entity\\SupplierMedia sm中选择sm,其中sm.supplier=:supplier和sm.type=:type GROUP BY sm.id最大值(sm.createdAt)”
have
表达式定义了将应用于WHERE
和GROUP BY
之后的结果集的条件
如果只需要从表中获取最后一条记录,请应用限制和排序依据。
HAVING
表达式定义了将在WHERE
和groupby
之后的结果集上应用的条件
如果您只需要从表中获取最后一条记录,请应用limit and order by。要获取每个供应商的最新对象,您可以使用自连接方法
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
选择一个
来自SupplierBundle\Entity\SupplierMedia a
左连接SupplierBundle\Entity\SupplierMedia b
a.供应商=b.供应商
和a.createdAt
要获取每个供应商的最新对象,可以使用自连接方法
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
选择一个
来自SupplierBundle\Entity\SupplierMedia a
左连接SupplierBundle\Entity\SupplierMedia b
a.供应商=b.供应商
和a.createdAt
->setMaxResults(1);你的意思是限制?它给了我最近最古老的元素,只要按方向改变
顺序,就像->orderBy('a.createdAt DESC')
这是正确的Syntax broorderBy('sm.createdAt','DESC')
谢谢你的帮助:)我真的很感激这个好主意(y)->setMaxResults(1);你的意思是限制?它给了我最近最古老的元素,只要改变顺序方向,比如->orderBy('a.createdAt DESC')
这是正确的Syntax broorderBy('sm.createdAt','DESC')
无论如何谢谢你的帮助:)我真的很感激这个好主意(y)@ahmedbhs已经有了它的DQL,如果您想要查询生成器版本,请遵循参考链接@ahmedbhs及其DQL;如果您想要查询生成器版本,请遵循参考链接