2016-08-19 54 views
2

我使用Laravel 5.2和我有變化Laravel關係輸出結構

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(),然後重新使用foreacharray_map()/array_filter()方法和編碼結果到JSON與json_encode()這陣。

我建議你將數據原樣(不重建它的結構)發送到前端或其他任何地方,並在那裏使用它。

+0

但是... 1)所需的輸出格式是json,2)仍然不會像OP想要的那樣更改權限數組。 –

+0

我被這個問題的標題搞混了(說數組)。我已經更新了答案。 –

+0

對於標題抱歉。所以,我不得不在查詢後重建數組?是否有可能在關係方法中做到這一點? –

0

我爲了提取權限ID的集合,你可以使用pluck()功能:

$permissionIds = $role->permissions->pluck('permission_id'); 

你也可以寫一個getter函數在Role型號:

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; 
0

在Laravel 5.2車型的返回值是集合實例,它可以用於轉換結果

$roles = Role::with('permissions')->get(); 
$roles->transform(function($role){ 
    $role['permissions'] = $role['permissions']->pluck('permission_id')->toArray(); 
    return $role; 
}); 

return $roles; 

此代碼將提供所需結果。

說明:你甚至可以在get函數之後鏈接變換函數。

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);  

這是爲我工作。所以檢查你的代碼。