Comment Doctrine2 gère-t-il le comportement en cascade avec ON DELETE CASCADE ?

DDD
Libérer: 2024-11-02 08:28:02
original
757 Les gens l'ont consulté

How Does Doctrine2 Handle Cascade Behavior with ON DELETE CASCADE?

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 :

  • Utilise cascade={"remove"} dans l'association d'entités.
  • Un calcul effectué par l'unité de travail (UoW).
  • Itère sur les objets associés et les supprime lorsque l'objet parent est supprimé.

2. Cascade au niveau de la base de données :

  • Utilise onDelete="CASCADE" sur la colonne de jointure dans l'association d'entité.
  • Crée l'option ON DELETE CASCADE sur la colonne de clé étrangère dans 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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!