1

我尝试为待办事项应用程序项目创建假数据,因此我使用工厂来执行此操作

我在类别模型上使用这个:

$factory->define(Category::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'order' => $faker->unique()->randomDigitNotNull,
    ];
});

当我使用修补程序时,一切正常,但是当我使用任务模型时

$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,消息‘最大重试次数为 10000 却没有找到唯一值’”,我不知道为什么它不起作用

4

1 回答 1

2

这有效

for ($i = 1; $i < 10; $i++) {
    $faker->unique()->randomDigitNotNull;
}

当您将 10 增加到任何值时(12、15、25);由于randomDigitNotNull方法的实现,它将给出一个例外。

public static function randomDigitNotNull()
{
    return mt_rand(1, 9);
}

既然您在说unique,该方法将返回该范围 [1,9] 内的值。如果您的循环迭代超过 9 次,则至少一个值将不是唯一的。

于 2020-05-04T18:02:36.180 回答