[英]How to turn this SQL query into Doctrine Query
我在 symfony 上使用这个原生 SQL 查询(这是一个非常糟糕的做法),但我正在努力让它与 DQL 一起运行而不触发几个错误。
SELECT Image.path, Image.name
FROM Image
LEFT JOIN ImageVoters ON Image.id = ImageVoters.image_id
WHERE ImageVoters.voter_id =1
AND ImageVoters.action = 'favourite'
ORDER BY Image.created_at ASC
这是我到目前为止所得到的
public function findMyFavourites()
{
return $this->getEntityManager()
->createQuery('SELECT p.path,p.name
FROM GabrielUploadBundle:Image p
LEFT JOIN GabrielUploadBundle:ImageVoters v
ON p.id = v.image_id
WHERE v.action ="favourite"
ORDER BY p.created_at ASC')
->getResult();
}
由于某种原因它抛出这个错误
错误:预期的 Doctrine\\ORM\\Query\\Lexer::T_WITH,“ON”
这是有效的查询
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('GabrielUploadBundle:Image')->createQueryBuilder('p')
->select(array('p.path', 'p.name','p.id','p.upvotes','p.imageowner','p.createdAt','p.updatedAt'))
->leftJoin('GabrielUploadBundle:ImageVoters', 'v', 'WITH', 'p.id = v.image_id')
->where("v.action = 'favourite'")
->andWhere("v.voter_id = 1")
->orderBy('p.createdAt', 'ASC')
->getQuery();
如果您将ON
更改为WITH
您的查询就可以了。
你也可以试试
$query = $em->getRepository('GabrielUploadBundle:Image')->createQueryBuilder('p')
->select(array('p.path', 'p.image'))
->leftJoin('GabrielUploadBundle:ImageVoters', 'v', 'WITH', 'p.id = v.image_id')
->where("v.action = 'favourite'")
->orderBy('p.createdAt', 'ASC')
->getQuery();
$result = $query->getResult();
p此外,如果您在 Image Entity 类中的 Image 模型和 ImageVoters 模型之间存在关系,则可以执行以下操作:
->leftJoin('p.imageVoters', 'v')
Doctrine 将为您完成剩下的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.