2012-08-09 48 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能夠自動管理它......太糟糕了。