sql - 如何将此 SQL 查询转换为 Doctrine 查询

标签 sql symfony doctrine-orm dql doctrine-query

我在 symfony 上使用这个 native 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();
    }

由于某种原因抛出此错误

Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got '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();

关于sql - 如何将此 SQL 查询转换为 Doctrine 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140363/

相关文章:

mysql - 在 MySQL 中的子字符串之间提取文本

Symfony 4 - 选项 "invalid_message"不存在

mysql - Doctrine - QueryBuilder - 获得结果中最年轻的实体

mysql - BIRT 中的 Select 语句提供与 MySQL Workbench 不同(且错误)的输出

c# - 获取 datacontext.ExecuteQuery 返回的动态对象的属性

MySQL 查询获取与第二列的最大值配对的列

phpspec - 方法返回对象而不是字符串

php - file_get_contents() 返回空字符串

php - 为 Admin Sonata 添加自己的字段

php - 按关联计数订购 DQL 连接