Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony原则采用最新的客体结果:Having子句_Symfony_Doctrine - Fatal编程技术网

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 bro
orderBy('sm.createdAt','DESC')
谢谢你的帮助:)我真的很感激这个好主意(y)->setMaxResults(1);你的意思是限制?它给了我最近最古老的元素,只要改变
顺序方向,比如
->orderBy('a.createdAt DESC')
这是正确的Syntax bro
orderBy('sm.createdAt','DESC')
无论如何谢谢你的帮助:)我真的很感激这个好主意(y)@ahmedbhs已经有了它的DQL,如果您想要查询生成器版本,请遵循参考链接@ahmedbhs及其DQL;如果您想要查询生成器版本,请遵循参考链接