渴望加载一对多关系
问题描述:
我对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()'。如果你成功获得所有角色(),那么这也应该起作用。 –