Symfony2当我从集合中删除它时,为什么Doctrine会删除我的元素?

时间:2014-08-18 16:31:43

标签: symfony collections doctrine

鉴于我有2个实体,发布评论

我的关系是:

发布

oneToMany:
    comments:
        targetEntity: Comment
        mappedBy: post
        orphanRemoval: false
        cascade: [ persist ]
        fetch: EXTRA_LAZY

注释

manyToOne:
    post:
        targetEntity: Post
        joinColumn:
            name: post_id
            referencedColumnName: id
            onDelete: SET NULL

现在在我的控制器中,每当我想手动从帖子中删除评论时,Doctrine也会从数据库中删除我的评论。

public function testAction()
{
    $postRepository = $this->getDoctrine()
                   ->getManager()
                   ->getRepository('MyBundle:Post');

    $post = $postRepository ->find(1);

    $commentRepository = $this->getDoctrine()
                   ->getManager()
                   ->getRepository('MyBundle:Comment');

    $comment = $commentRepository ->find(1);

    /* My comment is a child of the post */
    $post->removeComment($comment);    
}


/* Entity/Post */
public function removeComment(Comment $comment)
{
     $this->comments->removeElement($comment);
}

通过这样做,我的评论将从数据库中删除,我不明白。

PS:我找到了一个避免学说删除我的实体的解决方案:

foreach($post->getComments() as $_comment) {
    if ($commment === $_comment) {
        $post->removeComment($comment);
    }
}

在这种情况下,Doctrine没有删除我的评论,只是删除了我想要的关系。 有人可以解释一下吗?

由于

0 个答案:

没有答案