Comment implémenter « sur Supprimer Cascade » dans Doctrine2 ?

Mary-Kate Olsen
Libérer: 2024-11-03 00:19:02
original
724 Les gens l'ont consulté

How to Implement

Lors de l'implémentation de la suppression en cascade avec Doctrine2

Lorsque vous utilisez Doctrine2 pour gérer les relations avec la base de données, vous pouvez rencontrer le besoin de supprimer automatiquement les lignes enfants lors de la suppression d'une ligne parent. Ceci est réalisé grâce à l'option « lors de la suppression en cascade ».

Dans votre exemple spécifique, après avoir défini vos entités Enfant et Père, vous rencontrez un problème où l'option « en cas de suppression en cascade » n'est pas créée. dans la base de données. Cela est probablement dû à l'utilisation de cascades au niveau ORM (spécifiées comme cascade={"remove"} dans l'association).

Cascades au niveau ORM

Niveau ORM les cascades gèrent le processus de suppression au sein de UnitOfWork, affectant la structure de l'objet mais pas la base de données elle-même. Lors de la suppression d'un objet à l'aide de cascades au niveau ORM, UnitOfWork parcourt les objets associés et les supprime également.

Cascades au niveau de la base de données

Contrairement au niveau ORM cascades, les cascades au niveau de la base de données nécessitent de spécifier onDelete="CASCADE" dans la colonne de jointure de l'association. Cette approche ajoute la contrainte « lors de la suppression en cascade » à la colonne de clé étrangère dans la base de données, garantissant que les lignes enfants sont automatiquement supprimées lorsque la ligne parent est supprimée.

Pour corriger le problème, modifiez votre entité enfant comme suit. :

<code class="php">namespace Acme\CascadeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="child")
 */
class Child {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
     *
     * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
     *
     * @var father
     */
    private $father;
}</code>
Copier après la connexion

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!