1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】外部キー制約を追加したテーブルでシーディングをするとエラーが発生する

Last updated at Posted at 2024-01-11

きっかけ

シーディングを行ったら、SQLのエラーが発生した。詳細は以下の通り。

作業手順

  1. UsersテーブルのIDカラムとTweetsテーブルのuser_idカラムを関連づけるために、Tweetsテーブルのuser_idカラムに外部キー制約を付ける。
  2. UsersテーブルとTweetsテーブルのシーディングを実行する。
    (以下のようなデータをTweetsテーブルに格納する。)
    image.png

エラー

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails(`example_app`.`tweets`, CONSTRAINT `tweets_user_id_foreign` FOREIGN KEY(`user_id`) REFERENCES `users` (`id`)) (Connection: mysql, SQL: ...

原因

シーディングを実行する時にDatabaseSeederクラスに以下のように記述していた。

DatabaseSeeder.php
public function run(): void
    {
        // \App\Models\User::factory(10)->create();
		$this->call([
			TweetsSeeder::class,
			UsersSeeder::class,
		]);
    }

※先にTweetsテーブルのデータを作成するように記述していたため、Tweetsテーブルのuser_idカラムに格納できるUsersテーブルのIDがない。というエラーが出ていた。

解決策

TweetsSeeder::classUsersSeeder::class,の順番を逆にした。

DatabaseSeeder.php
public function run(): void
    {
        // \App\Models\User::factory(10)->create();
		$this->call([
			UsersSeeder::class,
			TweetsSeeder::class,
		]);
    }

無事にシーディングを実行することができた。

参考サイト

使用した本

P.130 ログインユーザーの情報を保存する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?