[英]Duplicated value in my JSON response in Laravel
我在控制器中创建了方法show()
以返回名称和时间戳 + 该角色拥有的所有权限。 Spatie/Laravel-Permission 负责将用户与我的 API 中的权限和角色相关联。
public function show($name)
{
$role = Role::findByName($name);
return response()->json([
$role,
$role->permissions
]);
}
输出:
[
{
"name": "root",
"created_at": "2019-04-08 19:41:49",
"updated_at": "2019-04-08 19:41:49",
"permissions": [
{
"name": "users.store"
},
{
"name": "users.destroy"
},
{
"name": "users.show.id"
},
{
"name": "users.update.id"
},
{
"name": "users.show.name"
},
{
"name": "users.update.name"
}
]
},
[
// This is duplicate
{
"name": "users.store"
},
{
"name": "users.destroy"
},
{
"name": "users.show.id"
},
{
"name": "users.update.id"
},
{
"name": "users.show.name"
},
{
"name": "users.update.name"
}
]
]
如您所见,存在无用的权限重复。
但是如果我从我的回复中删除 $role
return response()->json([
// $role,
$role->permissions
]);
一切安好
[
[
{
"name": "users.store"
},
{
"name": "users.destroy"
},
{
"name": "users.show.id"
},
{
"name": "users.update.id"
},
{
"name": "users.show.name"
},
{
"name": "users.update.name"
}
]
]
当我只想在没有权限的情况下返回 $role 时:
return response()->json([
$role,
// $role->permissions
]);
我的输出是:
[
{
"name": "root",
"created_at": "2019-04-08 19:41:49",
"updated_at": "2019-04-08 19:41:49"
}
]
当您在响应中调用$role->permissions
时,权限会加载到$role
对象中,然后序列化为 json。 所以基本上你是发送带有加载权限的$role
对象,并且你自己也在发送权限。
尝试:
public function show($name)
{
$role = Role::findByName($name)->load('permissions');
return response()->json([
$role
]);
}
你可以在这里使用 Eloquent:API 资源
public function show($name)
{
return new RoleResource(Role::findByName($name));
}
和 RoleResource 像这样:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class RoleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'permissions' => $this-> permissions,
];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.