Suppression des relations Many to Many
Salut à tou(te)s,
j'ai récemment repris l'apprentissage de Symfony2 et j'ai quelques soucis avec l'utilisation de Doctrine2.
Voici mon problème.
Pour la gestion de mes utilisateurs et rôles, j'ai décidé d'utiliser le célèbre FOSUserBundle. Tout va très bien pour la création des users, des groupes/rôles, et leur attribution aux différents users.
Là où ça se corse, c'est lors de la suppression d'un groupe auquel sont déjà rattachés des users. J'obtiens l'erreur suivante :
Citation:
An exception occurred while executing 'DELETE FROM fos_group WHERE id = ?' with params {"1":8}:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`symfony`.`fos_user_user_group`, CONSTRAINT `FK_B3C77447FE54D947` FOREIGN KEY (`group_id`) REFERENCES `fos_group` (`id`))
Après quelques recherches sur le net, j'ai trouvé des solutions qui parlent de rajouter une option permettant la suppression en cascade, mais dans ma classe Group, je n'ai aucune liaison faite avec mes users, elle n'est présente que dans la classe User.
Est-ce que quelqu'un aurait une piste pour moi?
Le but étant que lors de la suppression d'un groupe, toutes les relations entre ce groupe et les utilisateurs soient supprimées mais tout en gardant les autres relations (du même utilisateurs vers d'autres groupes).
Assez clair?
User
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| /**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Tehem\UserBundle\Entity\Group")
* @ORM\JoinTable(name="fos_user_user_group",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
public function __construct()
{
parent::__construct();
}
public function __toString()
{
return $this->getUsernameCanonical();
}
} |
Group
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| /**
* @ORM\Entity
* @ORM\Table(name="fos_group")
*/
class Group extends BaseGroup
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct('', array());
}
public function __toString()
{
return $this->getName();
}
} |
GroupController (deleteAction)
Code:
1 2 3 4
| $em = $this->getDoctrine()
->getManager();
$em->remove($group);
$em->flush(); |
Merci pour tout :)