Почему я не могу создать поддельные данные с помощью фейера, когда я использую уникальный метод - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь создать поддельные данные для проекта приложения todo, поэтому я использую фабрику для этого

, который я использую для категории Модель это:

$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 без нахождения уникального значения »», и я не знаю, почему оно не работает

1 Ответ

1 голос
/ 04 мая 2020

Это работает

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]. если ваш l oop повторяется более 9 раз, то хотя бы одно значение не будет уникальным.

...