2014-01-30 179 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关联。

相关问题