我正在使用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 );
}
}
也许是一件简单的事情,但我没有看到它。任何人都可以帮助我,或者告诉我另一种方法来做到这一点。提前谢谢。
答案 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); ?
进行链接