Maison  >  Article  >  base de données  >  Comment corriger l'erreur « Impossible de supprimer ou de mettre à jour une ligne parent » dans Laravel ?

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

DDD
DDDoriginal
2024-10-25 06:53:02230parcourir

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

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>

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>

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>

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!

Déclaration:
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