【问题标题】:Why i can't create fake data with faker when i use the unique method为什么当我使用独特的方法时我不能用 faker 创建假数据
【发布时间】:2020-05-04 17:20:33
【问题描述】:

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

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

$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 但没有找到唯一值'”我不知道为什么它不起作用

【问题讨论】:

    标签: laravel laravel-7 factories


    【解决方案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,该方法将返回该范围[1,9] 内的值。如果您的循环迭代超过 9 次,则至少一个值将不是唯一的。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 2019-05-15
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多