2016-01-06 63 views
3

我想我的种子数据库这样的:Laravel播种有关系雄辩生成器失败

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

相关!=因果关系。当你试图访问'Eloquent Builder'对象上的'Eloquent Model'属性时,通常会弹出这种类型的错误。 –

回答

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