Bonjour à tous.
Peut-être, avant tout, que ma manière de modéliser les choses n'est pas la bonne. Dans ce cas, je vous remercie d'avance de me "recadrer"...
J'ai quatre entités : User, Application, Bundle et Entity (U, A, B et E), et les relations suivantes (remove et persist en cascade) :
U 1-n A
A 1-n B
B 1-n E
Jusque là pas de problème. Sauf que mon User peut/doit avoir deux de ses Entity par défaut.
J'ai donc créé sur User les champs entity1 et entity2, puis les relations 1-1 correspondantes.
L'intérêt est de pouvoir accéder directement aux Entity par défaut de l'User, chose indispensable dans mon appli.
Sauf que la suppression d'un A ou d'un B provoque désormais une erreur Integrity constraint violation: 1451 que je n'arrive pas à corriger.
J'ai essayé différentes choses, dont les deux solutions proposées ici, sans succès.
Si je supprime les relations entre User et Entity ça fonctionne à nouveau. J'envisage donc différentes solutions pour contourner le problème :
- remplacer les champs entity1 et entity2 de User par des simples integers et gérer à la main la relation.
- gérer les statuts default1 et default2 au niveau de Entity via des champs booléens et gérer à la main la relation.
- laisser tel quel et gérer la suppression à la main dans mes controllers.
- jeter mon ordi par la fenêtre et me reconvertir en boucher-charcutier.
Mais aucune de ces solutions n'est satisfaisante, elles complexifient quelque chose qui peut/doit être simple. Si vous pouvez m'aider, j'en serai très reconnaissant.
Merci d'avance,
Soobook.
Erreur complète :
Définition des relations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 An exception occurred while executing 'DELETE FROM bundle WHERE id = ?' with params {"1":13}: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`misc`.`entity`, CONSTRAINT `FK_E284468F1FAD9D3` FOREIGN KEY (`bundle_id`) REFERENCES `bundle` (`id`))
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 # User : /** * @ORM\OneToMany(targetEntity="\sfCommands\ContentBundle\Entity\Application", mappedBy="user", cascade={"remove"}) * @ORM\OrderBy({"name" = "ASC"}) */ protected $applications; /** * @ORM\OneToOne(targetEntity="\sfCommands\ContentBundle\Entity\Entity") * @ORM\JoinColumn(name="entity1_id", referencedColumnName="id") */ private $entity1; /** * @ORM\OneToOne(targetEntity="\sfCommands\ContentBundle\Entity\Entity") * @ORM\JoinColumn(name="entity2_id", referencedColumnName="id") */ private $entity2; #Application : /** * @ORM\OneToMany(targetEntity="\sfCommands\ContentBundle\Entity\Bundle", mappedBy="application", cascade={"remove"}) * @ORM\OrderBy({"name" = "ASC"}) */ protected $bundles; /** * @ORM\ManyToOne(targetEntity="\sfCommands\UserBundle\Entity\User", inversedBy="applications", cascade={"persist"}) * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ protected $user; #Bundle : /** * @ORM\ManyToOne(targetEntity="\sfCommands\ContentBundle\Entity\Application", inversedBy="bundles", cascade={"persist"}) * @ORM\JoinColumn(name="application_id", referencedColumnName="id") */ protected $application; /** * @ORM\OneToMany(targetEntity="\sfCommands\ContentBundle\Entity\Entity", mappedBy="bundle", cascade={"remove"}) * @ORM\OrderBy({"name" = "ASC"}) */ protected $entitys; #Entity : /** * @ORM\ManyToOne(targetEntity="\sfCommands\ContentBundle\Entity\Bundle", inversedBy="entitys", cascade={"persist"}) * @ORM\JoinColumn(name="bundle_id", referencedColumnName="id") */ protected $bundle;
Partager