2016-01-06 6 views
3

Я пытаюсь посеять свою базу данных с так: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 

Что я делаю неправильно?

+0

Я не думаю, что ошибка генерируется из кода вы опубликовали. Вы получаете трассировку стека с ошибкой? –

+0

уверен, из-за этого, потому что, когда я удаляю фабрику для App :: user, все работает нормально. –

+0

Корреляция! = Причинность. Обычно этот тип ошибки появляется, когда вы пытаетесь получить доступ к свойству «Элементарной модели» на объекте «Красноречивый строитель». –

ответ

3

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

factory(App\User::class, 2)->create()->each(function($u) { 
    $role = factory(App\Role::class)->create(); 

    $u->role()->save($role); 
}); 

Source

Когда создается только один элемент, экземпляр возвращается непосредственно вместо коллекции.

Это должно работать для вашего случая:

$user = factory(App\User::class)->create(); 

$role = factory(App\Role::class)->create(); 

$user->role()->save($role);