2

我遇到了 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);

我的注释/元数据有什么问题或遗漏吗?

4

1 回答 1

1

我在 Doctrine 2 文档中找到了一些东西:

仅对关联的反面所做的更改将被忽略。确保更新双向关联的双方(或至少从 Doctrine 的角度来看拥有方)

在我的情况下,拥有方是我必须更新它的用户。学说 1 能够自动管理它……太糟糕了。

于 2012-08-09T07:39:15.540 回答