2012-08-09 60 views
2

我遇到了关于Doctrine 2实体关联的问题。 我有一个用户实体和代理实体。一个机构可以采用多个用户(实体被简化为只显示我的问题)主体2实体关联不为外键设置值

用户实体

/** 
* @Entity 
* @Table(name="users") 
**/ 
class User 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    * @var integer 
    **/ 
    protected $id; 

    /** 
    * @ManyToOne(targetEntity="Agency", inversedBy="users"}) 
    * @JoinColumn(name="agency_id", referencedColumnName="id") 
    * @var Agency 
    */ 
    protected $agency; 
} 

机构实体

/** 
* @Entity 
* @Table(name="agencies") 
**/ 
class Agency 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    * @var integer 
    **/ 
    protected $id; 

    /** 
    * @OneToMany(targetEntity="User", mappedBy="agency", cascade={"all"}) 
    * @JoinColumn(name="id", referencedColumnName="agency_id") 
    * @var User[] 
    */ 
    protected $users; 


    /** 
    * Add a user to the agency 
    * 
    * @param User $user 
    * @return void 
    */ 
    public function addUser(User $user) { 

     $this->users[] = $user; 
    } 
} 

当我现在用下面的代码要与用户一起创建代理商,Doctrine不会为用户设置agency_id,从而导致用户的agency_id不能为null的mysql约束错误。

// $em is the Doctrine EntityManager 
$agency = new Agency; 
$user = new User; 
$agency->addUser($user); 
$em->persist($agency); 
$em->flush(); 

到目前为止,唯一的办法,我发现做学说设置用户的agency_id被分配机构用户另外,以将用户添加到该机构。根据我对ORM的理解,当用户处于代理机构的用户集合中并且它正在保存时,它应该已经设置了agency_id。

$user->agency = $agency; 
$agency->addUser($user); 

我的注释/元数据有什么不对吗?

回答

1

我发现教条2文档中的内容:

只向一个关联的反向侧被忽略的变化。 请务必更新双向关联的双方(或 至少拥有方,从教义的角度来看)

正如我的情况下拥有一边是我必须更新它的用户。 Doctrine 1能够自动管理它......太糟糕了。