在Laravel的种子文件中,当为工厂覆盖参数时,如何声明$faker?

22 浏览
0 Comments

在Laravel的种子文件中,当为工厂覆盖参数时,如何声明$faker?

我正在尝试创建多个种子模型,比如seedt1seedt2seedt3,并为样本设置参数。

我知道工厂状态。我不想使用它,我想保持我的工厂模型尽可能简洁和清晰。

我有我的模型工厂:

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变量没有从模型工厂继承,我应该如何在种子文件中声明它才能使其工作?

0