繁体   English   中英

Laravel 5.1 - 模型工厂错误种子

[英]Laravel 5.1 - Model Factory Error seed

嗨,我正在尝试使用一些文章,BlogCategories,用户填充我的数据库。

当我做“php artisan db:seed”我有这个错误:

[ErrorException]传递给Illuminate \\ Database \\ Eloquent \\ Factory :: define()的参数2必须是可调用的。 字符串给定,在第22行的C:\\ xampp \\ htdocs \\ 2016 \\ database \\ factories \\ ModelFactory.php中调用并定义

我在模型中插入了所有关系,我完成了我的迁移!

ModelFactory.php

$factory->define(dixard\User::class, 'admin', function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('123'),
        'user_type' => 3,
        'remember_token' => str_random(10),
    ];
}); // line 22 

$factory->define(dixard\User::class, 'member', function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('123'),
        'user_type' => 1,
        'remember_token' => str_random(10),
    ];
});

$factory->define(dixard\BlogCategory::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->word,
    ];
});

$factory->define(dixard\Article::class, function (Faker\Generator $faker) {
    return [
        'title' => $faker->sentence,
        'content' => $faker->paragraph,
        'tags' => $faker->word,
        'user_id' => dixard\User::all()->random()->id,
        'category_id' => dixard\BlogCategory::all()->random()->id,
    ];
});

user_type可以是0(客户),1(艺术家),3(管理员)是一个bolean字段。

databaseSeeder.php

public function run()
    {
        Model::unguard();

        factory('dixard\User','admin', 3)->create();
        factory('dixard\BlogCategory', 5)->create();
        factory('dixard\Article', 20)->create();


        // $this->call(UserTableSeeder::class);
        $this->call(CategoryTableSeeder::class);
        $this->call(GenderTableSeeder::class);
        $this->call(ProductTableSeeder::class);
        $this->call(ColorTableSeeder::class);
        $this->call(BalanceTableSeeder::class);
        $this->call(ShippingsTableSeeder::class);
        $this->call(CouponTableSeeder::class);

        Model::reguard();
    }

谢谢您的帮助!

我相信你的意思是在前两个方法中使用defineAs()而不是define()

https://laravel.com/docs/5.1/testing§ “多种工厂类型”

$factory->defineAs(dixard\User::class, 'admin', function (Faker\Generator $faker) {
        return [
            'name' => $faker->name,
            'email' => $faker->safeEmail,
            'password' => bcrypt('123'),
            'user_type' => 3,
            'remember_token' => str_random(10),
        ];
    }); // line 22 

$factory->defineAs(dixard\User::class, 'member', function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('123'),
        'user_type' => 1,
        'remember_token' => str_random(10),
    ];
});

你需要像这样重新定义你的ModelFactory。

$factory->define(dixard\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('123'),
        'remember_token' => str_random(10),
        'user_type' = 1
    ];
});

然后在您的DatabaseSeeder文件中:

factory('dixard\User', 3)->create(['user_type'=>3]); // Create 3 admin users
factory('dixard\User', 3)->create(); // By default it will create 3 customer users
factory('dixard\BlogCategory', 5)->create();
factory('dixard\Article', 20)->create();

代替

$ factory-> define(dixard \\ User :: class,'admin',function(Faker \\ Generator $ faker)

只需删除每个方法的“生成器”,它应该是这样的:

$ factory-> define(dixard \\ User :: class,'admin',function(Faker $ faker)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM