Php 与一个实体Symfony2共享同一OneToMany关系的两个属性
让我们先描述一下我的情况。我正在使用Symfony2,我的实体之间的关系有问题 我有两个连接在一起的实体。这两个实体是Php 与一个实体Symfony2共享同一OneToMany关系的两个属性,php,symfony,doctrine-orm,one-to-many,many-to-one,Php,Symfony,Doctrine Orm,One To Many,Many To One,让我们先描述一下我的情况。我正在使用Symfony2,我的实体之间的关系有问题 我有两个连接在一起的实体。这两个实体是AssociationQuestion和AssociationPossibleAnswer。我目前正在创建一个提问软件,其中必须将左侧的一个可能答案链接到右侧的另一个可能答案,如以下示例中所示: 目前,我计划在类AssociationQuestion中拥有两个数组属性,它们将容纳许多AssociationPossibleAnswer对象。第一个数组将在左侧包含可能的答案,第二个
AssociationQuestion
和AssociationPossibleAnswer
。我目前正在创建一个提问软件,其中必须将左侧的一个可能答案链接到右侧的另一个可能答案,如以下示例中所示:
目前,我计划在类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.
我想知道这是否是在我的两个实体之间建立关系的正确方法是否可能有两个属性指向一个实体,而该实体却不知道该属性是从哪个属性指向的。这种情况无法通过一个多个关联解决 在
AssociationQuestion
和AssociationPossibleAnswer
之间需要两种不同的关系。按照你的设置方式,你只有一个关系。只需看看您在AssociationPossibleAnswer
中创建的1个多人关联
你试图在1的关系中有两个相反的方面,这在理论上是不可能的。一个关系只能有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;
// ...
教义称之为关联