我想在连接中使用子查询,但是Symfony2会抛出以下错误:
这是我失败的尝试:
$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是个好主意吗?
答案 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的原则文档。在我看来,这不是必要的工作。