我有一个场景,我正在更新一篇博文,该博文通过多对多关系(在名为 的链接表中blog_link_tags
)分配了多个标签,如下所示:
...
$em = $this->getDoctrine()->getManager();
$blogPost = $em->getRepository('MyBlogBundle:Blog')->find($postId);
$blogPost
->setTitle( $request->request->get('post_title', '') )
->setBody( $request->request->get('post_body', '') )
->setLive(true);
$postTags = json_decode( $request->request->get('post_tags', '') );
$tagRepository = $em->getRepository('MyBlogBundle:BlogTag');
foreach($postTags as $postTag) {
$tag = $tagRepository->find( $postTag->id );
if (!$tag) {
throw $this->createNotFoundException('Tag not found: ' . $tag->title);
}
$blogPost->addTag($tag);
}
$em->flush();
....
正如您可能知道的那样,如果我编辑博客文章并添加新标签,那么它将创建重复记录。
截断blog_link_tag
当前博客文章 ID 的记录表或仅插入那些唯一的标签 ID 的最佳方法是什么?是否会在 foreach 循环中的以下行中执行此操作:
$tag = $tagRepository->find( $postTag->id );
而是检查标签是否存在以及它是否还没有出现在链接表中?或者 Doctrine 2 是否提供了更好的方法来实现这样的行动?