Я могу добавить запись в many to many
таблицу tag_post
успешно, но я не могу удалить записи из tag_post
. Пожалуйста, имейте в виду, что я хочу только удалить записи из tag_post
не из таблицы post
сам.Удаление записи из многих во многие таблицы doctrine symfony 2
У меня есть 3 стола post
, tag
и tag_post
. таблицы tag_post
содержит соотношение между post
и tag
. поля в таблице tag_post
являются:
- tag_id
- POST_ID
Mapping файл после:
oneToMany:
tagPostAssociations:
targetEntity: Mockizart\Bundle\BlogBundle\Entity\MockblogTagPost
mappedBy: "post"
cascade: ["persist","remove"]
Mapping файл для тега:
oneToMany:
tagPostAssociations:
targetEntity: Mockizart\Bundle\BlogBundle\Entity\MockblogTagPost
mappedBy: "tag"
cascade: ["persist","remove"]
Отображение файлов для tag_post:
manyToOne:
post:
associationKey: true
targetEntity: Mockizart\Bundle\BlogBundle\Entity\MockblogPost
inversedBy: "tagPostAssociations"
tag:
targetEntity: Mockizart\Bundle\BlogBundle\Entity\MockblogTag
inversedBy: "tagPostAssociations"
Мой код для теста:
$post = $this->getDoctrine()->getManager()->find('MockizartBlogBundle:MockblogPost',6);
$b = $this->getDoctrine()->getManager()->find('MockizartBlogBundle:MockblogTagPost',['tagId' => 20,'postId' => 6]);
$post->removeTagPostAssociation($b);
$this->getDoctrine()->getManager()->persist($post);
$this->getDoctrine()->getManager()->flush();
Мой tag_post объект:
public function __construct($tag, $post)
{
$this->tagId = $tag->getId();
$this->postId = $post->getId();
$this->post = $post;
$this->tag = $tag;
}
Мой пост лицо:
public $tagPostAssociations;
public function __construct() {
$this->tagPostAssociations = new ArrayCollection();
}
public function addTagPostAssociation(MockblogTagPost $tagPostAssociations)
{
$newTag = $tagPostAssociations;
$this->newTags[$newTag->getTagId().$newTag->getPostId()] = $newTag;
$hasTagPost = $this->hasTagPost($newTag);
if (!$hasTagPost) {
$this->tagPostAssociations[] = $tagPostAssociations;
}
return $this;
}
public function removeTagPostAssociation(MockblogTagPost $tagPost)
{
$this->tagPostAssociations->removeElement($tagPost);
return $this;
}
public function getTagPostAssociations()
{
return $this->tagPostAssociations;
}
я только почтовые коды, которые я думаю, по данному делу. если вы хотите увидеть больше кода, пожалуйста, дайте мне знать.
Спасибо за ответ, но я прочитал эту ссылку (ответила на @ethan) [ссылка] (http://stackoverflow.com/questions/9653493/delete-in-many-to-many-table), но ему не нужно вызывать remove() – Kakashi
@MuhammadRifkiMockie. В этом вопросе вы используете истинную ассоциацию «ManyToMany», где вы решили абстрагировать 'ManyToMany' с двумя' ManyToOne' для одного объекта, чтобы вы могли добавлять атрибуты в ассоциацию. Доктрина не обрабатывает последнее изначально. – sjagr
Я тестировал то, что вы сказали выше, и это работает. но я до сих пор не понимаю, почему я могу добавить в 'tagPostAssociations' без' persist() 'отдельно, но не удалять их без' remove() '. есть ли у вас какие-либо ссылки об этом? – Kakashi