Сеялка 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 );
Другие вопросы по тегам