Doctrine2 не может установить отношения «2» один ко многим - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь создать 3 объекта (Предмет, Согласен, Не согласен) со следующими отношениями.

  • Элемент один ко многим Согласен
  • Элемент один ко многимНе согласен

Но только одно (объявленное позже) из двух созданных.

Вот мои файлы .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

А приведенный ниже код - это файл Item.php, автоматически сгенерированный Doctrine2.Как видите, он вообще не содержит «Согласен».


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 Ответ

8 голосов
/ 26 марта 2012

Вы были близки, вам просто нужно поместить все те же типы сопоставления ассоциаций в одно и то же объявление типа :)

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