2011-02-17 86 views
15

在Doctrine 2中是否可以创建两个对象,它们是多对多的,并且只有其中的一个对象才能保存以保存两者?Doctrine 2 ManyToMany cascade

用户实体:

/** 
* Owning Side 
* 
* @ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"}) 
* @JoinTable(name="user_roles", 
*  joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id")} 
*  ) 
*/ 
public $roles; 

角色实体:

/** 
* Inverse Side 
* 
* @ManyToMany(targetEntity="User", mappedBy="roles") 
*/ 
public $users; 

保存:

$role = new Role(); 

    $user = new User(); 

$user->roles->add($role); 
$role->users->add($user); 

$em->persist($user); 
$em->flush(); 

它不工作,trows错误“一个新的实体是通过发现未配置为级联持久性操作的关系:Entities \ Role @ 0000000004a29c11000000005c48cb75。显式保留新实体或者配置级联持久化关系的操作。“

回答

10

您应该将cascade={"persist"}应用于角色实体。

不是专家学者,但我认为Doctrine检查关联实体的级联选项。

因为你是从级联用户的坚持角色,它会检查角色实体是否应该与级联坚持。

+2

正如@OneToOne(targetEntity =“My_Model_FasciaEta”,cascade = {“persist”}) – max4ever 2011-11-18 11:16:29