Приветствую всех! СУБД выдаёт Integrity constraint violation: 1062 Duplicate entry, когда незначительно меняю код в ModelFactory, т.е. Faker выдаёт одинаковые e-mail, хотя указано unique() PHP: 'email' => $faker->unique()->safeEmail, При приведённом ниже коде СУБД выдаёт эту ошибку: ModelFactory.php PHP: $factory->define(App\User::class, function () { $faker = Faker\Factory::create('ru_RU'); //duplicate entries occuring, why? static $password; $hierarchyLevel = $faker->numberBetween($min = 2, $max = 5); switch ($hierarchyLevel) { case 2: $salary = $faker->numberBetween($min = 60000, $max = 90000); break; case 3: $salary = $faker->numberBetween($min = 40000, $max = 60000); break; case 4: $salary = $faker->numberBetween($min = 20000, $max = 40000); break; case 5: $salary = $faker->numberBetween($min = 10000, $max = 20000); break; } return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $password ?: $password = bcrypt('123456'), 'position' => $faker->jobTitle, 'date_of_employment' => $faker->date($format = 'Y-m-d', $max = 'now'), 'salary' => $salary, 'hierarchy_level' => $hierarchyLevel, 'remember_token' => str_random(60), ]; }); Во втором вырианте ошибки нет, но в этом случае я не знаю как заставить Faker выдавать данные на русском: ModelFactory.php PHP: $factory->define(App\User::class, function (Faker\Generator $faker) { //работает, но данные на английском static $password; $hierarchyLevel = $faker->numberBetween($min = 2, $max = 5); switch ($hierarchyLevel) { // case 1: // $salary = $faker->numberBetween($min = 90000, $max = 120000); // break; case 2: $salary = $faker->numberBetween($min = 60000, $max = 90000); break; case 3: $salary = $faker->numberBetween($min = 40000, $max = 60000); break; case 4: $salary = $faker->numberBetween($min = 20000, $max = 40000); break; case 5: $salary = $faker->numberBetween($min = 10000, $max = 20000); break; } return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $password ?: $password = bcrypt('123456'), 'position' => $faker->jobTitle, 'date_of_employment' => $faker->date($format = 'Y-m-d', $max = 'now'), 'salary' => $salary, 'hierarchy_level' => $hierarchyLevel, 'remember_token' => str_random(60), ]; }); Прошу помощи, нужно заставить faker выдавать русские данные при втором варианте, или что-то исправить в первом или третий вариант Заранее спасибо.
Ага. Почему так происходит я точно не понял, возможно, каждый раз получается новый instance of Faker\Factory, не знаю. Но зато точно понял как настроить Faker на русский. Нужно либо вставить этот код в AppServiceProvider в метод register() PHP: $this->app->singleton(FakerGenerator::class, function () { return FakerFactory::create('en_GB'); }); либо надо в config/app.php создать PHP: 'faker_locale' => ru_RU или так: 'faker_locale' => env('FAKER_LOCALE', 'en_US'), а в файле .env создать ещё опцию Код (Text): FAKER_LOCALE=ru_RU . Проверил на Laravel 5.4 — работает. Взято отсюда: https://github.com/laravel/ideas/issues/398