我试图为一个todo应用程序项目创建假数据,所以我使用工厂来做。
我使用的类别模型上。
$factory->define(Category::class, function (Faker $faker) {
return [
'name' => $faker->name,
'order' => $faker->unique()->randomDigitNotNull,
];
});
当我使用tinker时,一切都很完美,但当我对任务模型
$factory->define(Task::class, function (Faker $faker) {
return [
'category_id' => $faker->numberBetween($min = 1, $max = 6),
'name' => $faker->name,
'description' => $faker->text($maxNbChars = 200),
'satus' => $faker->boolean,
'expired_at' => $faker->dateTime($max = 'now'),
'order' => $faker->unique(true)->numberBetween(1, 50),
];
});
我收到一个错误 "OverflowException with message 'Maximum retries of 10000 reached without finding a unique value'",我不知道为什么它不能工作。
这工作
for ($i = 1; $i < 10; $i++) {
$faker->unique()->randomDigitNotNull;
}
当你把10增加到任何一个值(12, 15, 25)时,它将给出一个异常,因为实现了 randomDigitNotNull
方法。
public static function randomDigitNotNull()
{
return mt_rand(1, 9);
}
既然你说 unique
如果你的循环迭代超过9次,至少有一个值不会是唯一的。