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 :
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`))
Définition des relations :
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;