Doctrine2 : Comment implémenter On Delete Cascade pour une maintenance transparente de la base de données ?

Mary-Kate Olsen
Libérer: 2024-11-03 18:16:03
original
745 Les gens l'ont consulté

Doctrine2: How Do I Implement On Delete Cascade for seamless database maintenance?

Doctrine2 : Comprendre la suppression en cascade

Pour une maintenance transparente de la base de données, il est souvent nécessaire de supprimer automatiquement les enregistrements enfants lorsque l'enregistrement parent correspondant est supprimé . Doctrine2 prend en charge cette fonctionnalité via « On Supprimer Cascade », une fonctionnalité qui garantit que les enregistrements enfants sont supprimés lorsque leur parent l'est.

Exemples d'entités

Considérez les entités suivantes :

<code class="php">class Child {
    /** @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) */
    private $father;
}

class Father {
    /** @ORM\Id @ORM\GeneratedValue */
    private $id;
}</code>
Copier après la connexion

Le problème : cascade de base de données manquante

Alors que le code établit une relation entre l'enfant et le père avec une cascade de « suppression », la base de données n'a pas l'option « Sur suppression Contrainte Cascade".

Solution : Cascade au niveau de la base de données

Pour implémenter true On Delete Cascade, ajoutez onDelete="CASCADE" à la colonne de jointure de l'enfant :

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

Ceci précise que lorsqu'une ligne est supprimée de la table Père, toutes les lignes correspondantes de la table Enfant seront automatiquement supprimées.

Attention : Comprendre Cascades

Il est important de noter la distinction entre les cascades au niveau ORM et au niveau de la base de données. Les cascades au niveau ORM fonctionnent au sein de UnitOfWork de Doctrine et n'affectent pas la structure de la base de données, tandis que les cascades au niveau de la base de données créent des contraintes physiques dans la base de données. Dans l'exemple actuel, cascade={"remove"} est une cascade au niveau ORM qui déclenchera une suppression récursive dans UnitOfWork, mais cela n'entraînera pas le comportement souhaité de la base de données.

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
À 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!