2010-09-09 19 views
2

J'essaie de suivre les conseils des docs de doctrine sur this page - en initialisant un membre de classe avec ArrayCollection. Tout fonctionne bien pour l'exemple donné dans les docs. Je suis en train de le faire avec une classe héritée mais je reçois une erreur disant:doctrine2 Erreur ArrayCollection

Class Doctrine\Common\Collections\ArrayCollection is not a valid entity or mapped super class 

classe Héritée:

/** 
* @Entity 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"user" = "App_User", "group" = "App_Group"}) 
*/ 

abstract class App_Acl_Role_Abstract implements Zend_Acl_Role_Interface { 

/** 
* @ManyToOne(targetEntity="App_Acl_Role_Abstract", inversedBy="children", cascade={"persist"}) 
*/ 
private $parents; 

/** 
* @OneToMany(targetEntity="App_Acl_Role_Abstract", mappedBy="parents", cascade={"persist"}) 
*/ 
private $children; 

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

}

classe Héritant:

/** 
* @Entity 
* @Table(name="App_User") 
*/ 
class App_User extends App_Acl_Role_Abstract 
{ 
    ... 
} 

Lorsque Je déplace le constructeur vers la classe d'héritage tout fonctionne bien. Mais il serait beaucoup plus facile de les avoir dans la classe abstraite héritée. Pourquoi ça ne marche pas? C'est possible?

Répondre

0

Mon mauvais. J'ai bourré la cartographie. Ceci est la mise en correspondance J'utilise maintenant:

/** 
* @ManyToMany(targetEntity="App_Acl_Role_Abstract", cascade={"persist"}) 
* @JoinTable(name="role_parents", 
*  joinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="parent_id", referencedColumnName="id", unique=true)} 
*  ) 
*/ 
private $parents; 

/** 
* @ManyToMany(targetEntity="App_Acl_Role_Abstract", cascade={"persist"}) 
* @JoinTable(name="role_children", 
*  joinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="child_id", referencedColumnName="id", unique=true)} 
*  ) 
*/ 
private $children; 

Un rôle devrait être en mesure d'avoir beaucoup de parents et de nombreux enfants