2011-02-17 126 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

相關問題