2014-01-30 180 views
5

我們首先描述一下我的情況。我正在使用Symfony2,並且我的實體之間存在關係問題。與一個實體共享同一個OneToMany關係的兩個屬性Symfony2

我有兩個鏈接在一起的實體。這兩個實體分別是AssociationQuestionAssociationPossibleAnswer。我目前正在創建一個問卷軟件,其中一個將不得不在右邊左邊鏈接一個可能的答案,另外一個可能的答案,如下面的例子:

目前,我打算有兩個屬性是類AssociationQuestion中的數組,該數組可以容納多個AssociationPossibleAnswer對象。第一個數組包含左側可能的答案,第二個數組包含右側可能的答案。

因此,對我來說,它看起來像我將有兩個一對多關係,AssociationQuestion

AssociationQuestion: 

    oneToMany: 
     possibleAnswersLeft: 
      targetEntity: AssociationPossibleAnswer 
      mappedBy: associationQuestion 

     possibleAnswersRight: 
      targetEntity: AssociationPossibleAnswer 
      mappedBy: associationQuestion 

然後,在AssociationPossibleAnswer,我將有一個多對一的關係:

AssociationPossibleAnswer: 
    manyToOne: 
     associationQuestion: 
      targetEntity: AssociationQuestion 

的問題是,我嘗試驗證我的學說時出現以下錯誤。看來你不能鏈接到一個如我所希望做的兩個實體...

* The field AssociationQuestion#possibleAnswersLeft is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity AssociationPossibleAnswer#associationQuestion does not contain the required 'inversedBy=possibleAnswersLeft' attribute. 

* The field AssociationQuestion#possibleAnswersRight is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity AssociationPossibleAnswer#associationQuestion does not contain the required 'inversedBy=possibleAnswersRight' attribute. 

我想知道如果這是我的設置我的兩個實體之間關係的正確方法。 是否有可能有兩個屬性指向一個實體,而實體不知道它指向哪個屬性。

回答

7

這種情況不能用OneToMany關聯解決。

你需要AssociationQuestionAssociationPossibleAnswer之間的2個不同的關係。你設置它的方式,你只有1個關係。看看您在AssociationPossibleAnswer中創建的1個ManyToOne關聯。

你想擁有的是1間的關係,這在理論上是不可能的2路兩側。關係只能有2個端點(不是3個)。

解決方案

AssociationQuestion實現2(單向)多對多的關聯,使外鍵指向AssociationPossibleAnswer獨特:

class AssociationQuestion 
{ 

    /** 
    * @ORM\ManyToMany(targetEntity="AssociationPossibleAnswer") 
    * @ORM\JoinTable(name="association_question_association_possible_answer_left", 
    *  joinColumns={@ORM\JoinColumn(name="association_question_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="association_possible_answer_id", referencedColumnName="id", unique=true)} 
    *) 
    */ 
    private $possibleAnswersLeft; 

    /** 
    * @ORM\ManyToMany(targetEntity="AssociationPossibleAnswer") 
    * @ORM\JoinTable(name="association_question_association_possible_answer_right", 
    *  joinColumns={@ORM\JoinColumn(name="association_question_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="association_possible_answer_id", referencedColumnName="id", unique=true)} 
    *) 
    */ 
    private $possibleAnswersRight; 

    // ... 

主義這個調用One-To-Many, Unidirectional with Join Table關聯。

相關問題