为什么当我使用 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 次,至少有一个值将不是唯一的。