2011-02-17 17 views
15

¿Es posible en Doctrine 2 crear dos objetos que están relacionados con muchos y la llamada persiste solo en uno de ellos para guardar ambos?Doctrine 2 ManyToMany cascade

entidad

usuario:

/** 
* 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; 

Papel de la Entidad:

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

Ahorro:

$role = new Role(); 

    $user = new User(); 

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

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

No funciona y trows de un error "Una nueva entidad se ha encontrado a través de una relación que no se configuró para continuar operaciones en cascada: Entidades \ Rol @ 0000000004a29c11000000005c48cb75. Persistir explícitamente la nueva entidad o configurar las operaciones de persistencia en cascada en la relación ".

Respuesta

10

Debe aplicar cascade={"persist"} a la entidad Rol.

No soy un experto en Doctrine, pero creo que Doctrine comprueba la entidad asociada para las opciones en cascada.

Puesto que usted está en cascada del persisten deUsuariosaRoles, comprueba el papel entidad si se debe persistir con cascada.

+2

como en @OneToOne (targetEntity = "My_Model_FasciaEta", cascade = {"persist"}) – max4ever

Cuestiones relacionadas