Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Impossible de supprimer ou de mettre à jour une ligne parent » dans Laravel ?
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!