尝试使用Doctrine 2连接两个简单的表

时间:2013-09-28 03:22:50

标签: php mysql symfony join doctrine-orm

我是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 语句?不幸的是,知道文档没那么有用。

1 个答案:

答案 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();

}