我正在使用Laravel 5.2,我有
的角色和权限模型Role.php
public function permissions()
{
return $this->hasMany('App\Permissions');
}
如果我打电话
return Role::with('permissions')->get()
它会返回
[{
"id": 2,
"name": "training_vendor",
"display_name": "Training Vendor",
"description": "Role for vendor",
"created_at": "2016-06-23 08:05:47",
"updated_at": "2016-06-23 08:05:47",
"permissions": [
{
"permission_id": 1,
"role_id": 2
},
{
"permission_id": 2,
"role_id": 2
},
{
"permission_id": 3,
"role_id": 2
},
{
"permission_id": 4,
"role_id": 2
},
{
"permission_id": 5,
"role_id": 2
}
}]
是否可以将“权限”结构更改为类似的内容?
[{
"id": 2,
"name": "training_vendor",
"display_name": "Training Vendor",
"description": "Role for vendor",
"created_at": "2016-06-23 08:05:47",
"updated_at": "2016-06-23 08:05:47",
"permissions": [1,2,3,4,5]
}]
答案 0 :(得分:0)
如果你想获得一个数组(如标题所示),请使用toArray()
方法:
return Role::with('permissions')->get()->toArray();
它会将集合转换为数组。
如果您需要获取自定义格式化JSON(如示例所示),请使用toArray()
,然后使用foreach
或array_map()
/ array_filter()
方法重建此数组,使用json_encode()
将结果编码为JSON。
我建议您按原样发送数据(不重建它的结构)到前端或其他任何地方并在那里使用它。
答案 1 :(得分:0)
我要提取您可以使用pluck()
功能的权限ID集合:
$permissionIds = $role->permissions->pluck('permission_id');
您还可以在Role
模型中编写一个getter函数:
public function getPermissionIds()
{
return $this->permissions->pluck('permission_id');
}
并使用它:
$permissionIds = $role->getPermissionIds();
您甚至可以覆盖魔术__get()
功能:
public function __get($attr)
{
if ($attr === 'permissionIds') {
return $this->getPermissionIds();
} else {
return parent::__get($attr);
}
}
并访问权限ID,如属性:
$permissionIds = $role->permissionIds;
答案 2 :(得分:0)
在Laravel 5.2中,模型的返回值是 Collection 实例,可用于转换结果
$roles = Role::with('permissions')->get();
$roles->transform(function($role){
$role['permissions'] = $role['permissions']->pluck('permission_id')->toArray();
return $role;
});
return $roles;
此代码将提供理想的结果。
注意:您甚至可以在get函数之后链接转换函数。
答案 3 :(得分:0)
我希望这个答案能对你有所帮助,
$role = Role::all();
foreach ($role as $index){
$permissions= $index->permissions;
foreach ($permissions as $permission){
$permissionId[] = $permission->permission_id;
}
unset($index->permissions);
$index['all_permissions']= $permissionId;
}
return response()->json($role, 200);
这对我有用。所以检查你的代码。