我遇到了 Doctrine 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 没有为用户设置代理 ID,这导致用户的代理 ID 不能为空的 mysql 约束错误。
// $em is the Doctrine EntityManager
$agency = new Agency;
$user = new User;
$agency->addUser($user);
$em->persist($agency);
$em->flush();
到目前为止,我发现让 Doctrine 为用户设置代理 ID 的唯一方法是将代理分配给用户,另外将用户添加到代理。在我对 ORM 的理解中,当用户在代理机构的用户集合中并且它正在被保存时,它应该已经设置了机构 ID。
$user->agency = $agency;
$agency->addUser($user);
我的注释/元数据有什么问题或遗漏吗?