(doctrine2 + symfony2) suppression en cascade: violation de la contrainte d'intégrité 1451

Tout d'abord, désolé pour mon mauvais anglais...

J'ai eu quatre entités : l'Utilisateur, l'Application, le Bundle & Entité. Voici leurs relations (avec en cascade persist & supprimer, voir code ci-dessous) :

  • Utilisateur 1-n Application
  • Application 1-n Bundle
  • Bundle 1-n Entité

Ça fonctionne. Mais un Utilisateur peut disposer de deux de ses entités en tant que par défaut, et j'ai besoin d'y accéder directement.

J'ai donc ajouter un Utilisateur sur deux champs, l'entité1 & entity2, avec un 1-1 relation. Et maintenant, mon application se bloque :

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`))

J'ai essayé plusieurs choses, y compris ceux fondée en ce postmais je n'étais pas en mesure de le réparer.

Toute aide sera la bienvenue, merci d'avance.

EDIT : je besoin de préciser que les Utilisateur->Entité relations sont optionnels : l'Utilisateur de l'entité1 & entity2 peut être null. L'erreur se produit même si ils sont nuls tous les deux.

Voici mes entités définitions :

# User :
    /**
     * @ORM\OneToMany(targetEntity="\sfCommands\ContentBundle\Entity\Application", mappedBy="user", cascade={"remove"}, orphanRemoval=true)
     * @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"}, orphanRemoval=true)
     * @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"}, orphanRemoval=true)
     * @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;

source d'informationauteur bgaze