Maison > base de données > tutoriel mysql > le corps du texte

Comment corriger l'erreur « Impossible de supprimer ou de mettre à jour une ligne parent » dans Laravel ?

DDD
Libérer: 2024-10-25 06:53:02
original
229 Les gens l'ont consulté

How to Fix the

Résolution de l'erreur « Impossible de supprimer ou de mettre à jour une ligne parent » dans Laravel

Lors de la suppression d'une publication associée à des likes, vous rencontrez le problème suivant erreur :

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
Copier après la connexion

Cette erreur suggère un problème de schéma lié aux contraintes de clé étrangère.

Analyse du problème

La table des likes a une clé étrangère contrainte sur post_id qui fait référence à la colonne id dans la table posts. Lorsque vous tentez de supprimer une publication sans supprimer au préalable ses likes associés, la contrainte de clé étrangère sur likes.post_id empêche l'opération.

Solution 1 : Utiliser onDelete('cascade')

Pour résoudre le problème, vous pouvez configurer l'action onDelete pour la clé étrangère likes.post_id dans le fichier de migration des likes :

<code class="php">Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});</code>
Copier après la connexion

Avec cette configuration, lorsqu'une publication est supprimée, tous les likes associés sera automatiquement supprimé, résolvant ainsi la violation de la clé étrangère.

Solution 2 : Supprimer explicitement les likes

Alternativement, vous pouvez supprimer explicitement les likes associés à la publication avant de supprimer le se poster lui-même. Cette approche nécessite d'ajouter les lignes suivantes à votre PostController.php :

<code class="php">$post->likes()->delete();
$post->delete();</code>
Copier après la connexion
Copier après la connexion

Solution basée sur les relations

Si vos modèles ont une relation configurée entre eux, vous pouvez utilisez l'approche suivante pour supprimer à la fois la publication et ses likes associés en une seule opération :

<code class="php">$post->likes()->delete();
$post->delete();</code>
Copier après la connexion
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
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!