我与users
和roles
有很多关系。用户可以拥有多个角色,但我只希望with
获得第一个角色。
请考虑以下代码:
User::with('roles')->get()
适用于所有角色,但我只想要第一个role
。
我已经在我的模型中进行了设置但不起作用:
public function role()
{
return $this->roles()->first();
}
如何仅为第一个结果加载with
?
答案 0 :(得分:0)
您应该可以直接在热切加载的关系上调用first
,如下所示:
User::with(['roles' => function ($query) {
$query->first();
})->get();
答案 1 :(得分:0)
first()
实际执行查询并将结果作为集合返回。 Relationships must return a query builder,然后可以链接或执行,因此在关系中使用first()
将无效。
<强>更新强>
我意识到你想在role
中使用with
,所以你需要创建一个关系来做到这一点。在User
模型上建立新关系(您可以使用任何limit described in the docs,而不只是oldest()
):
public function role()
{
return $this->hasOne('App\Role')->oldest();
}
然后你可以使用它:
$users = User::with('role')->get();