我的一张桌子有多对多的自引用非平等关系。数据库表看起来像:
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: 结果我无意中创建了重复项。一旦我改变了功能以实际防止它们,它似乎工作正常。
答案 0 :(得分:0)
事实证明这是我自己的错。正如我所提到的,当我设置为避免重复值时,我使用id作为键...但是,最初加载的那些没有给出这样的键,所以我实际上导致了重复。
,我在执行此操作之前只是检查它是否包含它,然后才能正常工作。