Php 条令,删除收藏?

Php 条令,删除收藏?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我需要用Symfony2删除一个带有条令的集合 因此,我检索所有对象,如下所示: $comments = $em->getRepository('ProjectApplicationBundle:Comment')->findBy(array('user_id' => $user_id)); 因此,有了这个,我可以检索到很多评论 如何删除这些评论?一个简单的$em->remove($comments)不起作用 是否需要循环注释并删除每个元素?直接编写查询更好吗? 还有更好的办

我需要用Symfony2删除一个带有条令的集合

因此,我检索所有对象,如下所示:

$comments = $em->getRepository('ProjectApplicationBundle:Comment')->findBy(array('user_id' => $user_id));
因此,有了这个,我可以检索到很多评论

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

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

您需要将它们放入循环中,然后删除每个循环

foreach ($comments as $cm) {
    $em->remove($cm);
}
$em->flush();
以防万一,如果某个字段有一个omany关系,并且希望删除该字段或集合中某个特定对象的所有相关对象,则可以尝试

//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();
这是一条单行线:

$comments->forAll(函数($key,$entity){$this->em->remove($entity);返回true;});

当然,不要忘记
$em->flush()之后。

一个衬里应如下所示:

$comments->forAll(function($key, $entity) { 
    $this->em->remove($entity); 
    return true; 
});

休息好

您没有忘记
$em->flush()?不,我们不能使用remove()删除集合在这种情况下,
foreach
将帮助您,对于从集合中删除元素的每个循环,第一个循环将解决您的问题。接下来是一个可能对未来有用的示例,直接编写delete查询不是更好吗?直接是什么意思?是否意味着
$em->remove($comments)
?例如,使用createquerybuilder编写删除查询并不更好?它不是比循环、删除和刷新更快吗?使用sql可能会稍微快一点,但几乎不引人注目。让ORM来完成它的工作。如果因为删除用户而删除注释,则只需在关系上添加一个级联选项,注释将自动删除。这一行代码不起作用,因为如果不从回调中返回任何真实的内容,则所有的
将在第一个元素后停止。@fracz谢谢!纠正