####Laravelのseederやらfactoryについて勉強中、連続した日付データの挿入に苦戦したので備忘録
schedule_table
id | title | schedule_day |
---|---|---|
1 | aaa | 2020-09-27 |
2 | bbb | 2020-09-28 |
3 | ccc | 2020-09-29 |
4 | ddd | 2020-09-30 |
5 | eee | 2020-10-01 |
↑こんな感じで日付が連続したテストデータが欲しかった
実行するシーダーファイルを記述
DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
UserSeeder::class,
ScheduleSeeder::class
]);
}
}
対象のカラムはシーダーファイルから値を指定するので空文字にしておく
ScheduleFactory.php
$factory->define(App\Models\Schedule::class, function (Faker $faker) {
return [
'title' => $faker->words,
// seederファイルから上書きするので空にしておく
'schedule_day' => '',
];
});
modify('+1day')でタイムスタンプを変更しつつ、その日付をfor文で一件ずつ挿入していく
ScheduleSeeder.php
class ScheduleSeeder extends Seeder
{
public function run()
{
$scheduled_date = new DateTime();
for ($i = 0; $i < 5; $i++)
{
factory(App\Models\Schedule::class, 1)
// createに配列でカラム名、値をセットするとfactoryファイルの内容を上書きできる
->create([
'schedule_day' => $scheduled_date->modify('+1day')->format('Y-m-d')
]);
}
}
}
この辺、あまり参考記事がないので難しい、、