Comprendre la suppression de la cascade avec Doctrine2
Doctrine2 offre la flexibilité nécessaire pour configurer le comportement en cascade lorsque vous travaillez avec des entités associées. Cependant, une idée fausse courante est que la définition de cascade={"remove"} dans l'association d'entité ajoutera automatiquement l'option ON DELETE CASCADE à la colonne de clé étrangère dans la base de données.
Dans Doctrine2, il existe deux types distincts. de cascades :
1. Cascade au niveau ORM :
2. Cascade au niveau de la base de données :
L'exemple fourni dans la question utilise la cascade au niveau ORM. Bien qu'il supprime correctement les objets enfants associés lors de la suppression du parent, il ne crée pas l'option ON DELETE CASCADE dans la base de données. Pour y parvenir, la modification suivante est requise :
<code class="php">/** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumns({ * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") * }) * * @var Father */ private $father;</code>
Il est important de noter que l'utilisation de la cascade au niveau ORM comme dans l'exemple entraînera la suppression de l'objet parent lorsqu'un objet enfant est supprimé. Ce n'est probablement pas le comportement prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!