我需要使用Sytrfony2删除带有Doctrine的集合。
所以,我检索所有这样的对象:
$comments = $em->getRepository('ProjectApplicationBundle:Comment')->findBy(array('user_id' => $user_id));
所以,有了这个,我可以检索很多评论。
如何删除这些评论?一个简单的$em->remove($comments)
不起作用。
是否需要循环注释并删除每个元素?最好直接编写查询? 有更好的方法吗?感谢
答案 0 :(得分:6)
你需要把它们放在循环中并删除每一个
foreach ($comments as $cm) {
$em->remove($cm);
}
$em->flush();
为了将来如果您有一个字段的OneToMany关系,并且您想要删除所有相关对象或该集合中的特定对象,您可以尝试
//entity class
/**
* @ORM\OneToMany(targetEntity="Target_Entity_Class",mappedBy="mapped_property")
* @var ArrayCollection
*/
$objects;
//...
public function removeObject(\Name\Space\To\Target\Entity $target)
{
$this->objects->removeElement($target);
}
在你的控制器中你可以说
// assume $removed_objects_list is an array of related objects which you want to remove
$target_object = $em->getRepository('TargetEntity')->find($target_id);
foreach ($removed_objects_list as $object) {
$target_object->removeObject($object);
}
$em->flush();
答案 1 :(得分:1)
单行应该是这样的:
{{1}}
休息很好!
答案 2 :(得分:0)
这是一个单行:
$comments->forAll(function($key, $entity) {$this->em->remove($entity); return true;});
当然,之后不要忘记$em->flush();
。