Doctrine2: notion de cascade

Par défaut, doctrine2 ne cascade aucune opérations.
C’est à dire que si une entité mère est supprimée, les entités filles avec lesquelles elle était en relation ne seront pas supprimées de la base de donnée.
Pour réaliser la suppression en cascade, il faut rajouter l’option cascade={“remove”} dans le mapping de l’entité.
Exemple:
/** * @var Fille $fille * * @ORM\OneToOne(targetEntity="Fille", cascade={"remove"}) */ private $fille;
Parallèlement, la création d’une entité mère et d’une entité fille (à travers un formulaire imbriqué) n’entraine pas l’insertion en base de donnée de l’entité fille.
Pour cela, il faut:
- soit utiliser l’option cascade={“persist”} dans le mapping de l’entité.
/** * @ORM\OneToOne(targetEntity="Adresse", cascade={"persist"}) */
On peut bien sur combiner les cascades dans le mapping de l’entité:
cascade={“remove”, “persist”}
Il existe d’autres options de cascade. Pour cela le lien en fin d’article vers le site officiel pourra vous aider. - soit préciser dans le controller de l’entité mère une deuxième opération persist($fille) pour l’entité fille.
if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); ... $em->persist($entity); $em->persist($entity->getFille()); ... }
Dans cet exemple, getFille() est l’accesseur à l’entité fille (décrit dans le mapping OneToOne de l’exemple précédent)
Pour des exemples complet qui vous aiderons à comprendre en détail le système de cascade, je vous fournit ici quelques liens: