Symfony 主义 ManyToMany 插入

Symfony doctrine ManyToMany insert

我有一个可以创建新 "Book" 的表格。 对于一本书,我可以添加标签(例如描述关于它的附加信息)。

Book和Tag之间的关系是ManyToMany,因为每本书可以有很多标签,每个标签可以依赖不同的书。 (每个标签都是其名称中的唯一字段)。因此,当用户向数据库中不存在的书籍输入新标签时,我想在提交时创建标签。如果它已经存在,我想将标签添加到书中。我尝试了以下方法:

$book = $this->form->getData();

foreach ($tags as $tag) {
  $tag = strtolower($tag);

  // check if tag already exists
  $tagEntity = $this->em->getRepository('BookBundle:Tag')->findByName($tag);

  // if not, create new tag and add
  if(null === $tagEntity)
  {
      $tagEntity = new Tag();
      $tagEntity->setName($tag);
  }

  // add tag to book
  $book->addTag($tagEntity);
  // add book to tag
  $tagEntity->addbook($book);

  // create relation between tag and book
  $this->em->persist($book);
  $this->em->persist($tagEntity);

  $this->em->flush();
}

问题:

1) 我是否需要先在第 1 行之后使用 persist 和 flush 创建这本书,然后才能继续?

2) 像我上面描述的那样处理向图书添加(新)标签的最佳方法是什么?

当我点击 "submit" 时,我的本地 Apache 没有响应 "hangs up"..

此致

尽量不要同时将图书添加到标签和将标签添加到图书。只需将标签添加到书籍并保留书籍实体。教义应该做这一切。当然,书籍或标签实体应该有添加书籍或标签的方法,由学说自动生成。