我在使用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 );
}
}也许是一件很简单的事,但我看不见。有人能帮我吗,或者告诉我另一种方法。提前谢谢。
发布于 2014-07-05 17:52:18
因为Doctrine (默认情况下在Symfony2中使用ORM)已经完成了自动操作,因此实际上是在复制内容中的子内容实例。
要想看到它已经存在,你可以这样做:
$contents = $em->getRepository('myBundle:Content')->findAll();
foreach ($contents as $content) {
foreach ($content->getSubcontents() as $subcontent) {
var_dump($subcontent);
}
}教条使用称为lazy loading的技术。这意味着,当您从数据库加载一个Content实体时,它将自动对数据库执行一个查询,这将加载它的子内容并将它们返回给您,而不是$content->getSubcontents()。
但是,如果您在foreach循环中使用它,可能会触发许多查询,因此您可能应该告诉它在查询中直接连接子内容。
发布于 2014-07-05 17:52:32
您可以通过contentId搜索子内容:这意味着您已经将子内容链接到了内容。但是为什么要再次链接到$cont->addSubcontent( $sb );?
https://stackoverflow.com/questions/24589036
复制相似问题