Doctrine2无法建立'2'的一对多关系

时间:2011-10-19 07:46:39

标签: doctrine-orm doctrine yaml one-to-many

我正在尝试使用以下关系制作3个实体(Item,Agree,Disagree)。

  • 项目一对多同意
  • 项目一对多不同意

但是只有一个关系(稍后宣布)中有两个关系。

这是我的.yml文件。


Entities\Item:
  type: entity
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  oneToMany:
    agrees:
      targetEntity: Agree
      mappedBy: items
  oneToMany:
    disagrees:
      targetEntity: Disagree
      mappedBy: items

Entities\Agree:
  type: entity
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  manyToOne:
    items:
      targetEntity: Item
      inversedBy: agrees

Entities\Disagree:
  type: entity
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  manyToOne:
    items:
      targetEntity: Item
      inversedBy: disagrees

下面的代码是Doctrine2自动生成的Item.php。如您所见,它根本不包含“同意”。


namespace Entities;

class Item {
    private $id;
    private $disagrees;

    public function __construct() {
        $this->disagrees = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getId() {
        return $this->id;
    }

    public function addDisagrees(\Entities\Disagree $disagrees) {
        $this->disagrees[] = $disagrees;
    }

    public function getDisagrees() {
        return $this->disagrees;
    }
}

如果我切换声明顺序(首先是“不同意”,然后是“同意”,如下所示),则Item.php此时只有“同意”相关的代码。


Entities\Item:
  type: entity
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  oneToMany:
    disagrees:
      targetEntity: Disagree
      mappedBy: items
  oneToMany:
    agrees:
      targetEntity: Agree
      mappedBy: items

我的代码出了什么问题?任何评论都会有所帮助。

项目,同意和不同意只是展示此问题的示例。在实际项目中,同意和不同意是完全不同的实体。所以,不要建议我将它们合并到统一的实体中。 :)

1 个答案:

答案 0 :(得分:8)

你很接近,你只需要在相同的类型声明下放置所有相同的关联映射类型:)

  oneToMany:
    agrees:
      targetEntity: Agree
      mappedBy: items  
    disagrees:
      targetEntity: Disagree
      mappedBy: items