Symfony ManyToMany 删除记录

Symfony ManyToMany delete record

我试图更新 "book * <- -> * tag" 之间的多对多关系。为此,我首先想删除一本书的所有当前相关标签 - 然后再次添加更改/输入的标签。 删除一本书的所有标签是有效的,但是当一个标签没有映射更多的书时,它不会被删除:

 // remove all tags from book
    foreach($book->getTags() as $tag)
    {
        $tag->removeBook($book);

        // remove tag if no books are mapped anymore
        if(count($tag->getBooks()) == 0) {
            $this->em->remove($tag);
        }
        $this->em->persist($tag);
    }
    $this->em->flush();

如果计数returns 0(我已经检查过它进入了块。

,为什么它不删除$tag(A标签实体对象)

我关系的拥有方是 "Tag"-实体。

也许尝试将持久化操作放在 else 语句中。

虽然我没有测试过,但在我看来,在这种情况下,无论你是否删除标签,你总是最终会再次持久化标签。

如果 count($tag->getBooks()) == 0:

,您只是删除了 Tag
$this->em->remove($tag);

并再次坚持:

$this->em->persist($tag);

else 为必填项:

if(count($tag->getBooks()) == 0) {
    $this->em->remove($tag);
} else {
    $this->em->persist($tag);
}

澄清你的混合物:

remove an entity:

$this->em->remove($tag);

add / change an entity:

$this->em->persist($tag);

In both cases, you will need at the end:

$this->em->flush();