如何在Symfony2中更新单向多线程映射?

如何在Symfony2中更新单向多线程映射?,symfony,doctrine,Symfony,Doctrine,我已经寻找了几个小时的答案,但我自己找不到一个干净的解决方案 我有一个名为“Tag”的实体。你可以将这些标签添加到几乎所有内容中,例如文章、新闻等等。因此,我的Entite(在本例中是一篇文章)使用单向多个映射引用这些标记: /** * @ORM\ManyToMany(targetEntity="Tag") * @ORM\JoinTable(name="tag2article", * joinColumns={@ORM\JoinColumn(name="article_id",

我已经寻找了几个小时的答案,但我自己找不到一个干净的解决方案

我有一个名为“Tag”的实体。你可以将这些标签添加到几乎所有内容中,例如文章、新闻等等。因此,我的Entite(在本例中是一篇文章)使用单向多个映射引用这些标记:

/**
 * @ORM\ManyToMany(targetEntity="Tag")
 * @ORM\JoinTable(name="tag2article",
 *      joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 * )
 */
private $tags;
这种关系是单向的,因为我不希望有一个articleTag、一个newsTag等,也不希望有几个实体作为Jointable。《条令手册》将单向多对多关系称为“不太常见”,因为您可以使用附加的joinTableEntity将此类关系构建为3个实体。但这将导致此类实体过多

创建文章时,这些标记通过以下方式添加:

foreach ($tagArray as $tagId) {
        $tag = $entityManager->getRepository('myBundle:Tag')->findOneById($tagId);
        if ($tag != null) {
            $article->addTag($tag);
        }
    }
$entityManager->persist($article);
$entityManager->flush();
这适用于插入。在更新时我也这么做,但它不起作用,我不知道为什么。我找到的唯一解决方案是将这篇文章添加到标记中,但这是不可能的,尽管我正在处理单向关系

在我的文章表单中,我只有一个隐藏字段:

->add('tags', 'hidden', array(
                'data' => '',
                'property_path' => false
            ))
通过这种方式,我可以很容易地使用Ajax添加标记,并在这个隐藏字段中编写这些标记ID

我的总体问题是:为什么这种方法适用于插入,而不适用于更新?我能做些什么来解决这个问题


非常感谢您的帮助或任何提示

当你编辑文章并提交一份有效的表格时会发生什么?你说“更新时它不起作用”和“我把这篇文章添加到标签上,但这是不可能的”。每种情况下会发生什么?你能说得更具体一点吗?如果我编辑了文章,所有更改都会正确保存,例如文章的名称或内容。我在文章中添加了标签,并且我还测试了这些标签是否真的应用到文章中,并且它们是正确的。我可以通过$article->getTags()获得所有这些标签;但如果我坚持,它们不会更新。没有人知道@Gremo或@Carlos的线索吗?