我想获得每个产品ID的最低出价。
return $this->getEntityManager()
->createQuery('
SELECT PARTIAL b.{Id, MIN(amount) as amount, currency}, PARTIAL p.{id, firstName, lastName}
FROM AppBundle:Bid b
LEFT JOIN b.provider p
WHERE b.product in (:product)
AND b.status = :status
GROUP BY b.product
ORDER BY b.amount'
)
->setParameter('product', $ids)
->setParameter('status', 'active')
->getResult()
;
我收到以下错误
[语法错误]第0行,第42栏:错误:预期 Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_CURLY_BRACE,得到'('
我在SQL中运行完全相似的查询,它工作正常,但我不确定如何在doctrine查询构建器中实现相同。
答案 0 :(得分:1)
如果你想用doctrine查询用户mysql函数你必须添加doctrine mysql函数的扩展名,或者你可以用户本机查询。我在后面添加了原生查询:
use Doctrine\ORM\Query\ResultSetMapping;
$rsm = new ResultSetMapping();
$rsm->addEntityResult('AppBundle:Bid', 'b');
$rsm->addFieldResult('b', 'Id', 'Id');
$rsm->addFieldResult('b', 'amount', 'amount');
$rsm->addFieldResult('b', 'currency', 'currency');
...
$sqlQuery = "SELECT b.Id, MIN(b.amount), b.currency, p.firstName, p.lastName
FROM AppBundle:Bid b
LEFT JOIN b.AppBundle:Provider p
WHERE b.AppBundle:Product in (:product)
AND b.status = :status
GROUP BY b.product
ORDER BY b.amount";
$query = $em->createNativeQuery($sqlQuery, $rsm)
->setParameter('product', $ids)
->setParameter('status', 'active');
$query->getResult();
如果有任何问题,请告诉我
答案 1 :(得分:1)
在DQL查询中使用PARTIAL
关键字时,您只能列出所选实体的属性(MIN()
函数不是您实体的属性)。您可以简单地省略PARTIAL
部分并使用这样的查询(请注意,Doctrine不会返回结果集中的对象,只返回平面数组,另请参阅http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#partial-object-syntax):
SELECT b.Id, MIN(b.amount) as amount, b.currency as bid, p.id, p.firstName, p.lastName as provider
FROM AppBundle:Bid b
LEFT JOIN b.provider p
WHERE b.product in (:product) AND b.status = :status
GROUP BY b.product
ORDER BY b.amount