ホームページ >データベース >mysql チュートリアル >Laravel で「親行を削除または更新できません: 外部キー制約が失敗します」エラーを解決する方法?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 11:37:02812ブラウズ

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') を使用する

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

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

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

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

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

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

以上がLaravel で「親行を削除または更新できません: 外部キー制約が失敗します」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。