在Laravel的种子文件中,当为工厂覆盖参数时,如何声明$faker?
在Laravel的种子文件中,当为工厂覆盖参数时,如何声明$faker?
我正在尝试创建多个种子模型,比如seedt1
,seedt2
,seedt3
,并为样本设置参数。
我知道工厂状态。我不想使用它,我想保持我的工厂模型尽可能简洁和清晰。
我有我的模型工厂:
define('App\User', function (Faker $faker) { $faker->locale = 'fr_FR'; return [ 'full_name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => bcrypt('secret'), 'remember_token' => Str::random(10), 'objective' => '0', 'role_id' =>1, 'isActive' => '1', 'img_path' =>'user-lg.jpg', ]; }); ////////// 客户工厂 ////////// $factory->define('App\Client', function ($faker) { $faker->locale = 'fr_FR'; return [ 'name' => $faker->company, 'legalname' => $faker->name, 'legalname2' => $faker->name, 'legalname3' => $faker->name, 'email' => $faker->email, 'address' => $faker->address, 'country' => $faker->country, 'website' => $faker->domainName, 'telephone' => $faker->phoneNumber, 'telephone2' => $faker->phoneNumber, 'fax' => $faker->PhoneNumber, 'other1' => $faker->email, 'other2' => $faker->email, 'other3' => $faker->email, 'foundeddate' => $faker->dateTimeThisDecade, 'crmregistered' => $faker->dateTimeThisYear, 'comments' => $faker->realText($maxNbChars = 300, $indexSize = 2), 'insurancenumber' => $faker->numberBetween($min = 80000, $max = 150000), 'data1' => $faker->boolean($chanceOfGettingTrue = 50), 'data2' => $faker->boolean($chanceOfGettingTrue = 50), 'type_id' => $faker->numberBetween($min = 1, $max = 2), 'isActive' => '1', 'user_id' => $faker->numberBetween($min = 3, $max = 15), 'img_path' =>'imageUrl($width, $height, \'cats\')', ]; }); ////////// 查询工厂 ////////// $factory->define('App\Query', function ($faker) { $faker->locale = 'fr_FR'; return [ 'guests_no' => $faker->numberBetween($min = 50, $max = 500), 'days_no' => $faker->numberBetween($min = 3, $max = 7), 'value' => $faker->ean8, 'arrival_date' => $faker->dateTimeInInterval($startDate = '+1 years', $interval = '+ 14 days', $timezone = null), 'departure_date' => $faker->dateTimeInInterval($startDate = '+1 years', $interval = '+ 21 days', $timezone = null), 'file_name' => $faker->numerify('dossier ######'), 'file_number' => $faker->ean8, 'facture_number' => $faker->creditCardNumber, 'guide' => $faker->boolean($chanceOfGettingTrue = 50), 'rentacar' => $faker->boolean($chanceOfGettingTrue = 50), 'aerial' => $faker->boolean($chanceOfGettingTrue = 50), 'user_id' => $faker->numberBetween($min = 3, $max = 15), 'client_id' => $faker->numberBetween($min = 1, $max = 1000), 'transport_type_id' => $faker->numberBetween($min = 1, $max = 3), 'created_at' => $faker->dateTimeThisYear, 'payment_status_id' => $faker->numberBetween($min = 1, $max = 3), 'query_status_id' => $faker->numberBetween($min = 1, $max = 7), 'query_type_id' => $faker->numberBetween($min = 1, $max = 3), 'isActive' => '1', 'notified' => $faker->boolean($chanceOfGettingTrue = 50), ]; }); ////////// 任务工厂 ////////// $factory->define('App\Task', function ($faker) { $faker->locale = 'fr_FR'; return [ 'text' => $faker->realText($maxNbChars = 300, $indexSize = 2), 'name' => $faker->name, 'status' => $faker->ean8, 'user_id' => $faker->numberBetween($min = 3, $max = 15), 'query_id' => $faker->numberBetween($min = 1, $max = 500), 'isActive' => '1', 'query_status_id' => $faker->numberBetween($min = 1, $max = 7), ]; }); ////////// 状态示例工厂 ////////// /*$factory->state(App\User::class, 'delinquent', function ($faker) { return [ 'account_status' => 'delinquent', ]; });*/
还有我的种子文件:
create(['role_id' =>'2',]); //1个财务用户,id为2 factory('App\User', 3)->create(['role_id' =>'4',]); //3个经理,id为3-5 factory('App\User', 5)->create(); //10个用户,id为6-10 factory('App\Client', 300)->create(['user_id' => $faker->numberBetween($min = 3, $max = 10),]); //300个客户 factory('App\Query', 1000)->create(['user_id' => $faker->numberBetween($min = 3, $max = 10), 'client_id' => $faker->numberBetween($min = 1, $max = 300),]); //300个查询 factory('App\Task', 5000)->create(['user_id' => $faker->numberBetween($min = 3, $max = 10), 'query_id' => $faker->numberBetween($min = 1, $max = 250),]); //5000个任务 //factory('App\User', 50)->states('premium', 'delinquent')->create(); } }
当我运行种子文件时:
php artisan db:seed --class=sampleT1
我得到:
deployer@debdaddytp:/var/www/mice$ php artisan db:seed --class=sampleT1 ErrorException Undefined variable: faker at database/seeds/sampleT1.php:20
很显然,faker变量没有从模型工厂继承,我应该如何在种子文件中声明它才能使其工作?