PHP的fakerr和laravel工厂每个新行的唯一日期

时间:2019-09-16 14:40:40

标签: php laravel factory faker

我想在数据库表中创建24行,每行需要一个唯一的日期,介于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();

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

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

1 个答案:

答案 0 :(得分:0)

我认为您最好创建一个普通工厂。

工厂

$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(),
    ]);
});