Symfony2 - 连接错误中的子查询

时间:2014-11-07 21:58:50

标签: mysql symfony doctrine-orm inner-join

我想在连接中使用子查询,但是Symfony2会抛出以下错误: enter image description here

这是我失败的尝试:

$query = $em->createQuery(
            'SELECT
              sc.id AS id,
              u.id AS userId,
              u.username AS username,
              sc_count.upvotes
            FROM
              myBundle:SuggestedCar sc
              INNER JOIN myBundle:User u WITH sc.user_id = u.id
              INNER JOIN (  SELECT sc1.user_id, COUNT(sc1.id) AS upvotes
                            FROM myBundle:SuggestedCar sc1
                            GROUP BY sc1.user_id
                ) sc_count WITH u.id = sc_count.user_id'
        );

基本上我只是加入了3张桌子而第三张桌子有一张桌子。在数据库中执行查询时,查询有效。

如何在连接中使用SELECT语句?此时使用原始SQL是个好主意吗?

1 个答案:

答案 0 :(得分:2)

$em->createQuery()函数期望DQL作为参数,而不是SQL。如果要执行原始SQL语句,则语法不同。你可以这样做:

$sql = "SELECT * FROM my_table";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll();

有关DQL或查询对象的更多信息,请参阅Querying for Object。最大的区别是DQL将返回一个对象(基于Symfony中的实体类)。我上面发布的方法只会给你一个PDO结果。因此,如果您执行原始SQL,请不要期望能够将结果用作对象。

如果要使用原始SQL并且仍将结果映射到对象,则可以查看有关Result set mapping的原则文档。在我看来,这不是必要的工作。