为什么当我使用 unique 方法时我不能用 faker 创建假数据
Why i can't create fake data with faker when i use the unique method
我尝试为待办事项应用程序项目创建虚假数据,所以我使用工厂来做到这一点
我在类别模型上使用了这个:
$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
并且该方法将 return 你的值在 [1,9] 范围内。如果您的循环迭代超过 9 次,至少有一个值将不是唯一的。
我尝试为待办事项应用程序项目创建虚假数据,所以我使用工厂来做到这一点
我在类别模型上使用了这个:
$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
并且该方法将 return 你的值在 [1,9] 范围内。如果您的循环迭代超过 9 次,至少有一个值将不是唯一的。