我想在数据库表中创建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字符串中有一个唯一的日子?
答案 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(),
]);
});