Symfony ManyToMany删除记录

时间:2015-06-08 22:03:18

标签: php symfony doctrine many-to-many

我试图更新“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(标记实体对象)(我已经检查过它是否进入了块。

我的关系的所有方是“标签” - 实体。

3 个答案:

答案 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);
}