2016-06-16 6 views
3

Привет, я пытаюсь заполнить мою базу данных некоторыми статьями, блогами, пользователями.Laravel 5.1 - Model Factory Ошибка семени

когда я делаю «PHP ремесленник дб: семя» я эту ошибку:

[ErrorException] Argument 2 passed to Illuminate\Database\Eloquent\Factory::define() must be callable. string given, called in C:\xampp\htdocs\2016\database\factories\ModelFactory.php on line 22 and defined

Я вставил все отношения в моей модели и я сделал мои Миграции хорошо!

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 can be 0 (customer), 1(artist), 3(admin) is a bolean field.

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(); 
    } 

Спасибо за вашу помощь!

+0

Каков ваш второй параметр в методе определения? –

ответ

2

Я считаю, что вы имели в виду использовать 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), 
    ]; 
}); 
0

вам нужно пересмотреть свой 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(); 
-2

Вместо

$ заводскую> определить (dixard \ User :: класс, 'админ', функция (Факер \ Генератор $ Факер)

просто удалить «генератор» для каждого метода, и это должно быть так:

$ предприятие-> define (dixard \ User :: class, 'admin', function (Faker $ faker)

+0

Основываясь на документации, связанной с принятым ответом, я не считаю, что это правильное решение. – jackel414

Смежные вопросы