我试图更新“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,为什么不删除$ tag(标记实体对象)(我已经检查过它是否进入了块。
我的关系的所有方是“标签” - 实体。
答案 0 :(得分:1)
澄清你的混合物:
删除实体:
$this->em->remove($tag);
添加/更改实体:
$this->em->persist($tag);
在这两种情况下,最后都需要:
$this->em->flush();
答案 1 :(得分:0)
也许尝试将持久操作放在else
语句中。
虽然我还没有对它进行测试,但在我看来,无论你是否删除了标签,你总是会再次坚持标签。
答案 2 :(得分:0)
如果Tag
:
count($tag->getBooks()) == 0
即可
$this->em->remove($tag);
再坚持下去:
$this->em->persist($tag);
else
是必需的:
if(count($tag->getBooks()) == 0) {
$this->em->remove($tag);
} else {
$this->em->persist($tag);
}