当我使用独特的方法时,为什么不能用faker创建假数据?

问题描述 投票:0回答:1

我试图为一个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'",我不知道为什么它不能工作。

laravel laravel-7 factories
1个回答
1
投票

这工作

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次,至少有一个值不会是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.