原则 2:双向关系,在不拥有的情况下添加实体不会持续存在
Posted
技术标签:
【中文标题】原则 2:双向关系,在不拥有的情况下添加实体不会持续存在【英文标题】:Doctrine 2: bi-directional relation, Adding entity on not owning will not persist 【发布时间】: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 为空; 为什么会这样,这是否可以修复。
我知道,当您向用户添加角色时,关系会被保存,但这不是我想要的。
【问题讨论】:
【参考方案1】:修改 AuthRole 实体下的 addUser
函数:
public function addAuthUser(AuthUser $authUser)
$authUser->setAuthRole($this); // important line
$this->authUsers[] = $authUser;
如果您使用 setter,则遍历整个数组并在每个数组上调用 setAuthRole($this)
。
【讨论】:
当然你可以这样做,但它是一个 hack。为什么我们能够使用级联持久化/添加到 arraycollection 如果它确实在你持久化实体时下蹲。 不,这不是 hack。你应该这样做......教义并不神奇(: :) 但是为什么我们还要为非拥有方保留一个级联。 你不知道,这在 AFAIK 文档中没有提到以上是关于原则 2:双向关系,在不拥有的情况下添加实体不会持续存在的主要内容,如果未能解决你的问题,请参考以下文章
Salesforce.com:用户无法编辑他添加到他不拥有的帐户的注释