Maison > développement back-end > tutoriel php > Suppression en cascade dans Doctrine2 : contraintes au niveau ORM ou au niveau de la base de données ?

Suppression en cascade dans Doctrine2 : contraintes au niveau ORM ou au niveau de la base de données ?

Linda Hamilton
Libérer: 2024-11-03 16:55:02
original
241 Les gens l'ont consulté

Cascade Deletion in Doctrine2: ORM-level vs. Database-level Constraints?

Établir des relations avec Doctrine2

Doctrine2 fournit deux mécanismes de gestion des relations : suppression en cascade et base de données- application des contraintes de niveau. Bien que les deux servent le même objectif (supprimer les entités associées lorsqu'une entité parent est supprimée), ils fonctionnent différemment.

Cascade au niveau ORM :

La cascade au niveau ORM utilise l'annotation cascade={"remove"}, comme on le voit dans votre entité Enfant. Cette option demande à Doctrine2 de supprimer automatiquement les entités enfants lorsque le parent est supprimé, mais uniquement dans le contexte de UnitOfWork de Doctrine. Cela ne crée aucune contrainte de base de données.

Application des contraintes au niveau de la base de données :

L'application des contraintes au niveau de la base de données est obtenue en ajoutant onDelete="CASCADE" au fichier étranger. Annotation @ORMJoinColumn de la colonne clé. Cela demande à la base de données de supprimer automatiquement les lignes enfants lorsqu'une ligne associée est supprimée de la table parent. Pour implémenter cette option dans votre entité enfant, modifiez l'annotation @ORMJoinColumn comme suit :

<code class="php">@ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")</code>
Copier après la connexion

Comprendre le comportement en cascade :

Il est important de noter que le comportement en cascade ne fonctionne que dans un seul sens. Dans votre configuration actuelle, la cascade est configurée pour supprimer les enfants lorsque le parent est supprimé (cascade={"remove"} dans Child). Cependant, la suppression d'un enfant n'entraîne pas la suppression du parent. Si vous désirez ce comportement, vous devrez inverser le paramètre de cascade ou utiliser une relation OneToMany avec orphanRemoval=true dans Father`.

En comprenant les différences entre ces mécanismes de cascade, vous pouvez établir efficacement des relations dans Doctrine2 et assurez-vous que les données associées sont systématiquement supprimées en fonction des besoins de votre entreprise.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal