ホームページ >データベース >mysql チュートリアル >Laravelで「親行を削除または更新できません」エラーを修正する方法は?

Laravelで「親行を削除または更新できません」エラーを修正する方法は?

DDD
DDDオリジナル
2024-10-25 06:53:02342ブラウズ

How to Fix the

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 サイトの他の関連記事を参照してください。

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