我對users
和roles
有多對多的關係。一個用戶可以有多個角色,但我只想with
搶先擔任角色。渴望加載一對多關係
考慮下面的代碼:
User::with('roles')->get()
所有角色的偉大工程,但我只想要第一個role
。
我已經在我的模型設置這可是不行的:
public function role()
{
return $this->roles()->first();
}
如何加載with
只有第一個結果?
我對users
和roles
有多對多的關係。一個用戶可以有多個角色,但我只想with
搶先擔任角色。渴望加載一對多關係
考慮下面的代碼:
User::with('roles')->get()
所有角色的偉大工程,但我只想要第一個role
。
我已經在我的模型設置這可是不行的:
public function role()
{
return $this->roles()->first();
}
如何加載with
只有第一個結果?
您應該能夠直接調用first
在這樣的渴望加載關係:
User::with(['roles' => function ($query) {
$query->first();
})->get();
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();
你的意思是什麼*不工作*,你是否收到任何錯誤信息,你觀察到了什麼行爲。還可以嘗試將其名稱更改爲其他類似名稱,從'public function role()'更改爲'public function firstrole()'。如果你成功獲得所有角色(),那麼這也應該起作用。 –