2
1

More than 3 years have passed since last update.

[Laravel]シーディングができなかった原因

Posted at

UserTableSeederとFoldersTableSeederの二つをシーディングしたかったのだがうまくいかない

UserTableSeeder

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      DB::table("users")->insert([
          "name" => "test",
          'email' => 'dummy@email.com',
          'password' => bcrypt('test1234'),
          'created_at' => Carbon::now(),
          'updated_at' => Carbon::now(),
      ]);   
    }
}
FoldersTableSeeder

class FoldersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

        $user = DB::table("users")->first();    

        $titles = ["プライベート","仕事","旅行"];
            foreach ($titles as $title) {
                DB::table("folders")->insert([
                "title" => $title,
                "user_id" => $user->id,
                "created_at" => Carbon::now(),
                "updated_at" => Carbon::now(),
            ]);
        }
    }
}

シーディングしようとするとこのエラーメッセージが出る

>php artisan db:seed

In FoldersTableSeeder.php
Trying to get property 'id' of non-object

FoldersTableSeederの「存在しないidというプロパティを取得しようとしている」。
「"user_id" => $user->id」の部分「id」が存在しない?

これはそもそもfirstメソッドでuserテーブルから取得したものだった。
もしかしてまだuserテーブルのシーディングができていないためデータがないのでは?

そこでuserテーブルから個別にシーディングすると

>php artisan db:seed --class=UsersTableSeeder
Database seeding completed successfully.

>php artisan db:seed --class=FoldersTableSeeder
Database seeding completed successfully.

成功。
やはりそういうことだったらしい。
複数のシーディングを同時に行うとテーブル間の関係がある場合うまくいかないことがあるようだ。

2
1
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
2
1