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

DDD
リリース: 2024-10-25 06:53:02
オリジナル
229 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!