我试图更新"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
语句中。
虽然我还没有测试过它,但在我看来,在这种情况下,无论你是否删除了一个标签,你总是会再次坚持这个标签。