我是Symfony 2和Doctrine 2的初学者。我有两个模型Blog
帖子和Comment
。它们通过blog_id
表格内的comment
FK相互关联。
我只是想创建一个带有博客ID的简单方法,检索该博客和相关评论。而不是在延迟加载相关注释时进行另一个查询。
这是我试过的:
<?php
namespace Blogger\BlogBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
class BlogRepository extends EntityRepository
{
public function getBlogWithComments($id)
{
$query = $this->getEntityManager()->createQuery('
SELECT b, c
FROM BloggerBlogBundle:Blog b
WHERE b.id = :id
JOIN b.id c
WHERE b.id = c.blog');
$query->setParameter("id", $id);
return $query->getResult();
}
}
我真的是Doctrine 2的初学者。我通常使用Query Builder,但我不知道如何使用它进行连接。所以在DQL中试过它,也无法弄明白。
每当我尝试调用getBlogWithComments
方法时,它都会出现此语法错误:
[语法错误]第0行,第80列:错误:字符串的预期结束,得到 '加入'
我想知道的是,如何使用Query Builder和DQL编写 JOIN 语句?不幸的是,知道文档没那么有用。
答案 0 :(得分:1)
带有DQL的JOIN
是通过引用实体之间的关系来完成的,它只需要一种方式。我的意思是b.comment c
就是所有需要的,不需要引用c.blog
。
public function getBlogWithComments($id)
{
return $this->getEntityManager()
->createQuery('
SELECT b, c
FROM BloggerBlogBundle:Blog b
JOIN b.comment c
WHERE b.id = :id
')
->setParameter("id", $id)
->getResult();
}