Заполнение 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' => '[email protected]',
        '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

Что я делаю не так?


person Jakub Kohout    schedule 06.01.2016    source источник
comment
Я не думаю, что ошибка возникает из-за кода, который вы разместили. Вы получаете трассировку стека с ошибкой?   -  person Ben Harold    schedule 06.01.2016
comment
это точно из-за этого, потому что когда я удаляю фабрику для App::user, все работает нормально.   -  person Jakub Kohout    schedule 06.01.2016
comment
Корреляция != причинно-следственная связь. Этот тип ошибки обычно появляется, когда вы пытаетесь получить доступ к свойству Eloquent Model объекта Eloquent Builder.   -  person Ben Harold    schedule 06.01.2016


Ответы (1)


К сожалению, функция each не работает с отдельными элементами. Вы должны создать более одной модели, чтобы использовать каждую функцию:

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 );
person Moritur    schedule 26.01.2016