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();
我试图更新 "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();