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