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);
我的註釋/元數據有什麼不對嗎?