「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel で「親行を削除または更新できません: 外部キー制約が失敗します」エラーを解決する方法は?

Laravel で「親行を削除または更新できません: 外部キー制約が失敗します」エラーを解決する方法は?

2024 年 11 月 10 日に公開
ブラウズ:410

How to Solve \

Laravel エラー:「親行を削除または更新できません: 外部キー制約が失敗します」

Laravel では、投稿を削除しようとすると興味深いエラーが発生することがあります「いいね!」が関連付けられているもの。エラー メッセージは次のように宣言します:

"SQLSTATE[23000]: 整合性制約違反: 1451 親行を削除または更新できません: 外部キー制約が失敗します (eliapi8.likes, CONSTRAINT likes_post_id_foreign FOREIGN KEY (post_id) REFERENCES 投稿(id))"

スキーマの分析

スキーマを調べると、like テーブルの post_id フィールドに外部キー制約が存在することがわかります。この制約により、関連する類似レコードがある場合、投稿レコードの削除が防止されます。

提案されたソリューション

解決策 1: onDelete('cascade') を使用する

likes テーブルの移行ファイルに onDelete('cascade') を導入することで解決策が得られます。このディレクティブを使用すると、投稿レコードが削除されると、対応するすべての類似レコードが自動的に削除されます:

Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

解決策 2: モデルの関係を活用する

Post モデルが Like モデルとの関係を維持している場合は、次のアプローチを使用できます:

  1. $post->likes()->get() を使用して、関連付けられたいいねを取得します。
  2. 取得したいいねを削除します。 $post->likes()->delete().
  3. 最後に、$post->delete().

を使用して投稿自体を削除します。これらの解決策のいずれかを採用すると、問題のあるエラーは解決され、いいねのステータスに関係なく投稿を削除できるようになります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3