2017-08-26 137 views
0

我對usersroles有多對多的關係。一個用戶可以有多個角色,但我只想with搶先擔任角色。渴望加載一對多關係

考慮下面的代碼:

User::with('roles')->get() 

所有角色的偉大工程,但我只想要第一個role

我已經在我的模型設置這可是不行的:

public function role() 
{ 
    return $this->roles()->first(); 
} 

如何加載with只有第一個結果?

+0

你的意思是什麼*不工作*,你是否收到任何錯誤信息,你觀察到了什麼行爲。還可以嘗試將其名稱更改爲其他類似名稱,從'public function role()'更改爲'public function firstrole()'。如果你成功獲得所有角色(),那麼這也應該起作用。 –

回答

0

您應該能夠直接調用first在這樣的渴望加載關係:

User::with(['roles' => function ($query) { 
    $query->first(); 
})->get(); 
0

first()實際執行查詢並返回結果集。 Relationships must return a query builder,然後可以鏈接或執行,因此在關係中使用first()將不起作用。

UPDATE

我意識到要在with使用role,所以你需要創建一個關係來做到這一點。創建你的User模型的新關係,(你可以使用任何limit described in the docs,不只是oldest()):

public function role() 
{ 
    return $this->hasOne('App\Role')->oldest(); 
} 

然後你就可以在使用它:

$users = User::with('role')->get();