2011-10-19 2 views
1

J'essaie de faire 3 entités (Item, Agree, Disagree) avec les relations suivantes.Doctrine2 ne peut pas faire '2' relations un-à-plusieurs

  • Item one-to-many D'accord
  • Item one-to-many Pas d'accord

Mais seulement une relation (déclarée plus tard) sur deux a fait.

Voici mes fichiers .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 

Et le code ci-dessous est généré automatiquement par Doctrine2 item.php. Comme vous pouvez le voir, il ne contient pas du tout «D'accord».


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; 
    } 
} 

Si je commute l'ordre de déclaration ('Pas d'accord' d'abord, puis by'Agree 'comme ci-dessous), item.php ne dispose que' code lié Agree' en ce moment .


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 

Quel est le problème avec mon code? Tous les commentaires seront utiles.

L'article, d'accord et en désaccord sont juste des échantillons pour montrer ce problème. En projet réel, d'accord et de désaccord sont des entités totalement différentes. Donc, ne me proposez pas de les fusionner en une entité unifiée. :)

Répondre

8

Vous étiez près, vous avez juste besoin de mettre tous les mêmes types de mappage d'association sous la même déclaration de type :)

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