Php 原则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;

我遇到了一个与条令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;
    }
}
代理实体

/**
 * @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能够自动管理它。。。太糟糕了