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