在Symfony2中,子内容被添加了2次

时间:2014-07-05 17:47:32

标签: php symfony

我正在使用symfony 2,我真的很喜欢这个。我有一个内容实体和一个子内容实体。我想显示两个实体。这部分工作正常,我可以获取正确的子内容,并将它们添加到正确的内容中。但它们在内容中添加了2次。我不明白为什么。子内容始终重复。这是添加它们的代码,它位于ContentController中。

$contents = $em->getRepository('myBundle:Content')->findAll();

   foreach($contents as $cont){
        $subcont = $em->getRepository('myBundle:SubContent')->findByContent( $cont->getId());

        foreach($subcont as $sb){
             $cont->addSubcontent( $sb );
        }
    }

也许是一件简单的事情,但我没有看到它。任何人都可以帮助我,或者告诉我另一种方法来做到这一点。提前谢谢。

2 个答案:

答案 0 :(得分:1)

由于Doctrine(默认情况下在Symfony2中使用的ORM)已经完成了您自动执行的操作,因此您实际上是在复制内容中的子内容实例。

要看到它已经存在,你可以这样做:

$contents = $em->getRepository('myBundle:Content')->findAll();

foreach ($contents as $content) {
    foreach ($content->getSubcontents() as $subcontent) {
        var_dump($subcontent);
    }
}

Doctrine使用名为lazy loading的技术。这意味着,当您从数据库加载Content实体而不是$content->getSubcontents()时,它将自动对数据库进行查询,该数据库将加载它的子内容并将它们返回给您。

但是,如果你在foreach循环中使用它可能会引发许多查询,你应该告诉它在查询中直接加入子内容。

答案 1 :(得分:1)

您通过contentId搜索子内容:这意味着您已经将子内容与内容相关联。 但是为什么你再次与 $ cont-> addSubcontent($ sb);

进行链接