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