2012-07-25 51 views
2

我刚开始探索Symfony2,我惊讶它有多少伟大的功能。我开始做博客教程在: http://tutorial.symblog.co.uk/
但使用的2.0主义加入旁路延迟加载

我的问题2.1版本,而不是是我的博客以下实体:

/** 
* @ORM\OneToMany(targetEntity="Comment", mappedBy="blog") 
*/ 
protected $comments; 

,并在注释实体如下:

/** 
* @var string $blog 
* 
* @ORM\ManyToOne(targetEntity="Blog", inversedBy="comments") 
* @ORM\JoinColumn(name="blog_id", referencedColumnName="id") 
*/ 
private $blog; 

我创建的功能,以获得最新的博客和加盟,使我没有为每个博客延迟加载评论意见,并避免评论TABL多个呼叫Ë像这样:

$qb = $this->createQueryBuilder('b') 
      ->select('b') 
      ->leftJoin('b.comments', 'c') 
      ->addOrderBy('b.created', 'DESC'); 

,但是当我在树枝模板运行该查询的结果是:blog.comments我得到的第一个查询检索博客与它的加入,但随后而不是使用业增加值的修正对于评论我得到了每个博客条目的评论表的电话?我如何绕过该功能的特定情况下,但保持关系,所以我可以从视图博客页面获得博客的所有评论?

+0

maerlyn答案是正确的 – DonCallisto 2012-07-26 07:04:45

回答

7

您还需要注释对象添加到选择的结果:

->select('b', 'c') 
+2

我这样做的时候,我只有一个单一的结果......你知道为什么吗? – benske 2012-11-30 09:44:49

+0

如果没有这种修改,你能正确地得到它们吗?生成的查询看起来好吗? (你可以在分析器中查看。) – Maerlyn 2012-11-30 13:04:56

+0

感谢您的快速回答。是的,我通过延迟加载正确地获取所有内容(但它需要很多查询)。这是我的DQL查询: '$ dql =“SELECT u,fb FROM SportBundle:Project u LEFT JOIN u.feedbacks fb WHERE u.id =:project_id ORDER BY fb.creation_date ASC”;' – benske 2012-12-01 08:30:31