Сеялка Laravel с отношениями Eloquent\Builder завершилась неудачно
Я пытаюсь заполнить свою базу данных следующим образом:
factory(App\User::class, 1)
->create()
->each(function($u) {
$role = factory(App\Role::class)->create();
$u->role()->save( $role );
});
а это мои модельные заводы:
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => 'Jakub Kohout',
'email' => 'test@gmail.com',
'password' => bcrypt('Uchiha'),
'role_id' => 1
];
});
$factory->define(App\Role::class, function (Faker\Generator $faker) {
return [
'role_name' => 'Admin',
];
});
Но я получил эту ошибку:
Undefined property: Illuminate\Database\Eloquent\Builder::$orders
Что я делаю неправильно?
1 ответ
К сожалению, каждая функция не работает с отдельными элементами. Вы должны создать более одной модели, чтобы использовать каждую функцию:
factory(App\User::class, 2)->create()->each(function($u) {
$role = factory(App\Role::class)->create();
$u->role()->save( $role );
});
Когда создается только один элемент, экземпляр возвращается непосредственно вместо коллекции.
Это должно работать для вашего случая:
$user = factory(App\User::class)->create();
$role = factory(App\Role::class)->create();
$user->role()->save( $role );