Laravel の「親行を削除または更新できない」エラーを解決する
いいね! が関連付けられている投稿を削除すると、次のような問題が発生します。エラー:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
このエラーは、外部キー制約に関連するスキーマの問題を示唆しています。
問題分析
いいね テーブルには外部キーがありますPosts テーブルの id 列を参照する post_id に対する制約。最初に関連する「いいね」を削除せずに投稿を削除しようとすると、likes.post_id の外部キー制約により操作が妨げられます。
解決策 1: onDelete('cascade') を使用する
この問題を解決するには、いいね移行ファイルで likes.post_id 外部キーの onDelete アクションを設定します。
<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>
この設定では、投稿が削除されると、関連付けられているすべてのいいね!は自動的に削除され、外部キー違反が解決されます。
解決策 2: いいねを明示的に削除する
または、投稿を削除する前に、投稿に関連付けられたいいねを明示的に削除することもできます。投稿自体。このアプローチでは、次の行を PostController.php に追加する必要があります:
<code class="php">$post->likes()->delete(); $post->delete();</code>
Relationship-Based Solution
モデル間に関係が設定されている場合、次のことができます。次のアプローチを使用して、投稿とそれに関連付けられた「いいね!」の両方を 1 回の操作で削除します:
<code class="php">$post->likes()->delete(); $post->delete();</code>
以上がLaravelで「親行を削除または更新できません」エラーを修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。