2012-05-02 7 views
0

У меня есть много-много самореферентных равноценных отношений для одной из моих таблиц. Таблицы баз данных выглядеть примерно так:Symfony2 Doctrine PHP Аннотация для refClassRelationAlias ​​

Node 
- id 

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

Это вызывает проблемы с доктриной, давая повторяющиеся записи для этого ID комбинации.

Эта тема, http://www.doctrine-project.org/jira/browse/DC-329, упоминает исправление в самом низу с помощью refClassRelationAlias.

Вопрос, как это реализовать? Я использую метод аннотации PHP для разметки своих классов, но они упоминают только использование файла YAML, который я сейчас не делаю.

Могу ли я реализовать это, полностью не переделав все в файл YAML? Если да, то как?

Спасибо.

UPDATE:

Моих два полей аннотированные так:

/** 
    * @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 и использую идентификатор объекта в качестве ключа, чтобы избежать дублирования в ArrayCollection.

Они исправили ошибку, и я просто делаю что-то неправильно? Или есть еще ошибка с другим исправлением. Я использую Symfony версии 2.0.12.

Спасибо.

UPDATE 2: Оказывается, я создавал дубликаты непреднамеренно. Как только я изменил функцию, чтобы фактически предотвратить их, кажется, что все работает нормально.

+0

Исправление для версии доктрины 1.2. –

+0

Есть ли исправление для последней версии, и я делаю что-то не так? – samanime

+0

Я еще не работал с самостоятельным ссылкой на отношения многих-ко-многим. Но все-таки вы можете рассказать о сценарии, когда возникает проблема с дублированием записи? –

ответ

0

Оказывается, это была моя собственная ошибка. Как я уже упоминал, я использовал идентификатор в качестве ключа, когда я настраивал, чтобы избежать дублирования значений ... однако первоначально загруженным не было такого ключа, поэтому я фактически вызывал дубликаты. Я перешел от этого к просто проверке, содержал ли он его перед добавлением, и теперь он работает нормально.