ホームページ  >  記事  >  データベース  >  関連する「いいね!」を持つ投稿を削除するときに外部キー制約の問題を処理するにはどうすればよいですか?

関連する「いいね!」を持つ投稿を削除するときに外部キー制約の問題を処理するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 11:22:02706ブラウズ

How to Handle Foreign Key Constraint Issues When Deleting Posts with Associated Likes?

外部キー制約の問題がある投稿を削除または更新できない

この質問は、いいね! が関連付けられている投稿を削除しようとすると発生します。その結果、エラーが発生します: 「SQLSTATE[23000]: 整合性制約違反: 1451 親行を削除または更新できません...」

問題の原因

Post スキーマと Like スキーマが 2 つのテーブル間に外部キー制約を確立すると、Like テーブルの post_id は Posts テーブルの ID を参照します。 「いいね!」がリンクされた投稿が削除されると、投稿を削除すると「いいね!」テーブルに孤立した「いいね!」が残るため、この制約に違反します。

解決策のオプション 1: onDelete('cascade')

解決策の 1 つは、Like 移行ファイルで onDelete('cascade') を使用することです。これは、Posts テーブルからレコードが削除されるときに、Like テーブル内のすべての対応するレコードも削除する必要があることを指定します。

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

解決策のオプション 2: 関連レコードの削除

また、Post モデルから Like モデルへの関係を定義している場合は、投稿自体を削除する前に、関連付けられた Like を削除できます。

$post->likes()->delete();
$post->delete();

これらのソリューションのいずれかを実装すると、外部キー制約エラーを解決し、「いいね!」が関連付けられた投稿を正常に削除できます。

以上が関連する「いいね!」を持つ投稿を削除するときに外部キー制約の問題を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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