0

我的一张表有一个多对多的自引用非相等关系。数据库表看起来像:

Node
- id

Node_Relationship
- parent_id (FK of Node.id)
- child_id (FK of Node.id)
- PRIMARY KEY (parent_id, child_id)

这会导致 Doctrine 出现问题,为该 ID 组合提供重复条目。

该线程http://www.doctrine-project.org/jira/browse/DC-329在使用 refClassRelationAlias 的最底部提到了一个修复。

我的问题是,我该如何实现呢?我正在使用 PHP 注释方法来标记我的类,但他们只提到使用 YAML 文件,而我目前没有这样做。

我可以在不将所有内容完全重做为 YAML 文件的情况下实现这一点吗?如果是这样,怎么做?

谢谢。

更新:

我的两个字段注释如下:

/**
     * @ORM\ManyToMany(targetEntity="Module", inversedBy="children")
     * @ORM\JoinTable(name="module_relationships",
     *      joinColumns={@ORM\JoinColumn(name="child_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="parent_id",  
     *      referencedColumnName="id")}
     *      )
     */
    protected $parents;

    /**
     * @ORM\ManyToMany(targetEntity="Module", mappedBy="parents")
     */
    protected $children;

当我向父母或孩子添加一些东西时,我也将它设置为相反的。我使用 set 并使用对象的 ID 作为键,以避免 ArrayCollection 中的重复。

他们是否修复了错误而我只是做错了什么?或者是否仍然存在具有不同修复程序的错误。我正在使用 Symfony 2.0.12 版。

谢谢。

更新2:原来我无意中创建了重复项。一旦我更改了功能以实际阻止它们,它似乎工作得很好。

4

1 回答 1

0

原来这是我自己的错。正如我所提到的,当我设置以避免重复值时,我使用 id 作为键......但是,最初加载的键没有被赋予这样的键,所以我实际上导致了重复。我从这样做切换到在添加之前简单地检查它是否包含它,现在它工作得很好。

于 2013-02-12T03:42:54.390 回答