Maison >base de données >tutoriel mysql >Comment gérer les problèmes de contraintes de clé étrangère lors de la suppression de publications avec des likes associés ?
Impossible de supprimer ou de mettre à jour la publication avec des problèmes de contrainte de clé étrangère
Cette question se pose lorsque vous tentez de supprimer une publication associée à des likes, entraînant l'erreur : "SQLSTATE[23000] : Violation de contrainte d'intégrité : 1451 Impossible de supprimer ou de mettre à jour une ligne parent..."
Cause du problème
Le à condition que les schémas Post et Like établissent une contrainte de clé étrangère entre les deux tables, où un post_id dans la table Like fait référence à l'identifiant dans la table Posts. Lorsqu'une publication avec des likes liés est supprimée, cela viole cette contrainte, car la suppression de la publication laisserait des likes orphelins dans le tableau des likes.
Option de solution 1 : onDelete('cascade')
Une solution consiste à utiliser onDelete('cascade') dans le fichier de migration Like. Cela spécifie que lorsqu'un enregistrement est supprimé de la table Posts, tous les enregistrements correspondants dans la table Like doivent également être supprimés.
Schema::create('likes', function (Blueprint $table) { $table->integer('post_id')->unsigned(); $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); });
Option de solution 2 : suppression des enregistrements associés
Alternativement, si vous avez défini une relation du modèle Post vers le modèle Like, vous pouvez supprimer les likes associés avant de supprimer la publication elle-même :
$post->likes()->delete(); $post->delete();
En mettant en œuvre l'une ou l'autre de ces solutions, vous peut résoudre l'erreur de contrainte de clé étrangère et supprimer avec succès les publications avec les likes associés.
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!