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

如果计数返回0(我已经检查过它是否进入了块。

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

澄清混合物:

删除实体:

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

添加/更改实体:

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

在这两种情况下,您最终都需要:

$this->em->flush();

如果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);
}

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

虽然我还没有测试过它,但在我看来,在这种情况下,无论你是否删除了一个标签,你总是会再次坚持这个标签。