【问题标题】:Doctrine 2: bi-directional relation, Adding entity on not owning will not persist原则 2:双向关系,在不拥有的情况下添加实体不会持续存在
【发布时间】:2012-08-22 10:28:28
【问题描述】:

原则 2:双向关系,在不拥有的情况下添加实体不会持久

class AuthRole
{
    /**
     * @ORM\OneToMany(targetEntity="AuthUser", mappedBy="role", cascade={"persist","detach"})
     * @ORM\JoinColumn(name="role_id", referencedColumnName="id")
     */
    private $authUsers;
}

AuthRole 是非拥有方

class AuthUser 
{
    /**
    * @ORM\ManyToOne(targetEntity="AuthRole", inversedBy="authUsers", cascade={"persist","detach"})
    * @ORM\JoinColumn(name="role_id", referencedColumnName="id")
    */
    private $role;
}

AuthUser 是拥有方

如果我将用户添加到角色,则不会保存关系并且 AuthUser->role 为空; 为什么会这样,这是否可以修复。

我知道,当您向用户添加角色时,关系会被保存,但这不是我想要的。

【问题讨论】:

    标签: php orm doctrine


    【解决方案1】:

    修改 AuthRole 实体下的 addUser 函数:

    public function addAuthUser(AuthUser $authUser)
    {
      $authUser->setAuthRole($this); // important line
      $this->authUsers[] = $authUser;
    }
    

    如果您使用 setter,则遍历整个数组并在每个数组上调用 setAuthRole($this)

    【讨论】:

    • 当然你可以这样做,但它是一个 hack。为什么我们能够使用级联持久化/添加到 arraycollection 如果它确实在你持久化实体时下蹲。
    • 不,这不是 hack。你应该这样做......教义并不神奇(:
    • :) 但是为什么我们还要为非拥有方保留一个级联。
    • 你不知道,这在 AFAIK 文档中没有提到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多