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 :
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.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`))
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
Group
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
GroupController (deleteAction)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
Merci pour tout
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $em = $this->getDoctrine() ->getManager(); $em->remove($group); $em->flush();![]()
Partager