2016-01-06 62 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);