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);
我的注释/元数据有什么不对吗?