php faker 和 laravel factorties 每个新行的唯一日期

php faker and laravel factorties unique date for each new row

我想在数据库中创建 24 行 table 每行都需要一个唯一的日期,在 1/12/2019(12 月 1 日)和 24/12/2019(12 月 24 日)之间包容性。

我在 运行 测试时使用工厂来创建数据行,我的工厂当前运行如下所示,

$factory->define(Quiz::class, function (Faker $faker) {
return [
    'date_playable' => $faker->dateTimeInInterval('2019-12-01', '+ 1 day', 'Europe/London')
];

});

在我的测试中,我执行以下操作,

$quizes = factory('App\Quiz', 24)->create();

然而,当我查询数据库时,测验 table 中的行 date_playable 都是唯一的,因为它们都有唯一的时间作为 DATETIME 的一部分,但日期始终是 2019-12 -01。

如何确保每一行都有一个 date_playable 从最后一行开始递增,或者在它的 DATETIME 字符串中有一个唯一的日期?

我觉得你最好创建一个普通的工厂。

工厂

$factory->define(Quiz::class, function (Faker $faker) {
    return [
        'date_playable' => $faker->dateTime(),
    ];
});

在测试中根据需要创建一个日期范围,并为每个日期调用工厂。

测试

$dates = CarbonPeriod::create('2019-12-01', '2019-12-12');

$dates->forEach(function($date) {
    factory(Quiz::class)->create([
        'date_playable' => $date->toDateTimeString(),
    ]);
});