主义,删除集合?

时间:2014-03-13 13:59:28

标签: php symfony doctrine-orm

我需要使用Sytrfony2删除带有Doctrine的集合。

所以,我检索所有这样的对象:

$comments = $em->getRepository('ProjectApplicationBundle:Comment')->findBy(array('user_id' => $user_id));

所以,有了这个,我可以检索很多评论。

如何删除这些评论?一个简单的$em->remove($comments)不起作用。

是否需要循环注释并删除每个元素?最好直接编写查询? 有更好的方法吗?感谢

3 个答案:

答案 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();