对于我的API,我需要返回一个具有相应权限的角色。
模特角色:
public function permissions()
{
return $this->belongsToMany( Permission::class );
}
模型权限:
public function roles()
{
return $this->belongsToMany( Role::class );
}
当我使用RoleController中的以下函数时:
/**
* Show the form for editing the specified resource.
*
* @param \App\Role $role
* @return \Illuminate\Http\Response
*/
public function edit( Role $role )
{
return response()->json( $role->with('permissions')->first(), 200 );
}
我只从角色获得第一个结果,即使我发送了不同的$role
。这意味着如果我发送角色2
或3
,我会从角色1
获得结果。
但是我还检查了确实返回正确角色的$role
2
)
角色1
的权限确实很难恢复,所以主要的问题是为什么我只从数据库中获得第一个结果?
答案 0 :(得分:2)
当你做的时候:
$role->with('permission')->first()
您实际上在Role
模型上运行另一个数据库查询,该模型为您提供第一个角色,无论您实际传递哪个角色。如果你想获得第一个许可,你需要做这样的事情:
$role->permissions->first();
这将加载permissions
关系并抓取集合中的第一个项目。正如其他人所建议的那样,如果您需要在已有对象时急切加载关系,则可以使用load
方法:
$role->load('permissions');
$firstPermission = $role->permissions->first();
答案 1 :(得分:1)
答案 2 :(得分:-1)
因为您使用first()
方法,它基本上返回第一个结果
请改用get()
来返回集合。