Php 原则2实体关联不为外键设置值
我遇到了一个与条令2实体关联的问题。 我有一个用户实体和一个代理实体。一个机构可以雇用多个用户(实体简化为仅显示我的问题) 用户实体Php 原则2实体关联不为外键设置值,php,doctrine-orm,associations,entity,Php,Doctrine Orm,Associations,Entity,我遇到了一个与条令2实体关联的问题。 我有一个用户实体和一个代理实体。一个机构可以雇用多个用户(实体简化为仅显示我的问题) 用户实体 /** * @Entity * @Table(name="users") **/ class User { /** * @Id * @Column(type="integer") * @GeneratedValue * @var integer **/ protected $id;
/**
* @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;
}
}
代理实体
/**
* @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,这会导致mysql约束错误,即用户的代理id不能为null
// $em is the Doctrine EntityManager
$agency = new Agency;
$user = new User;
$agency->addUser($user);
$em->persist($agency);
$em->flush();
到目前为止,我发现为用户设置代理id的唯一方法是将代理分配给用户,并将用户添加到代理中。在我对ORM的理解中,当用户在代理的用户集合中并且被保存时,它应该已经设置了代理id
$user->agency = $agency;
$agency->addUser($user);
我的注释/元数据有什么错误或缺失吗?我在条令2文档中发现了一些东西: 仅对关联的反面所做的更改将被忽略。 确保更新双向关联的两侧(或在 从学说的角度来看,至少是拥有方) 在我的情况下,拥有方是用户,我必须更新它。条令1能够自动管理它。。。太糟糕了