laravel轴的负载关系

9njqaruj  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(407)

在我的网站,我有用户,角色和权限。
每个用户都属于许多角色(例如user.php)和名为“role\u user”的透视表

  1. public function roles()
  2. {
  3. return $this->belongsToMany(Role::class);
  4. }

每个角色都属于多个权限(例如role.php)和名为“permission\u role”的透视表

  1. public function permissions()
  2. {
  3. return $this->belongsToMany(Permission::class);
  4. }

我想以某种方式访问用户权限,但我似乎想不通。基本上我在user.php上需要这样的东西

  1. public function permissions()
  2. {
  3. return $this->roles()->permissions();
  4. }

这可能吗?请帮忙。谢谢您。

gpfsuwkq

gpfsuwkq1#

拉雷维尔没有一个直接关系的本地支持。
我为此案例创建了一个包:https://github.com/staudenmeir/eloquent-has-many-deep
你可以这样使用它:

  1. class User extends Model {
  2. use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
  3. public function permissions() {
  4. return $this->hasManyDeep(
  5. Permission::class, ['role_user', Role::class, 'permission_role']
  6. );
  7. }
  8. }
ttp71kqs

ttp71kqs2#

如果您使用的是json格式的结果,那么如果您实现了有说服力的资源,这应该非常容易
定义以下三种资源:
(注意:要轻松定义如下所示的资源,请执行以下操作:

  1. php artisan make:resource UserRes

然后根据需要修改toarray函数。)
用户资源

  1. <?php
  2. namespace App\Http\Resources;
  3. use Illuminate\Http\Resources\Json\JsonResource;
  4. class UserRes extends JsonResource
  5. {
  6. /**
  7. * Transform the resource into an array.
  8. *
  9. * @param \Illuminate\Http\Request $request
  10. * @return array
  11. */
  12. public function toArray($request)
  13. {
  14. $user = parent::toArray($request);
  15. $user["roles"] = RolesRes::collection($this->roles);
  16. return $user;
  17. }
  18. }

角色

  1. <?php
  2. namespace App\Http\Resources;
  3. use Illuminate\Http\Resources\Json\JsonResource;
  4. class RolesRes extends JsonResource
  5. {
  6. /**
  7. * Transform the resource into an array.
  8. *
  9. * @param \Illuminate\Http\Request $request
  10. * @return array
  11. */
  12. public function toArray($request)
  13. {
  14. $res = parent::toArray($request);
  15. $res["permissions"] = $this->permissions;
  16. return $res;
  17. }
  18. }

许可证:

  1. <?php
  2. namespace App\Http\Resources;
  3. use Illuminate\Http\Resources\Json\JsonResource;
  4. class PermissionsRes extends JsonResource
  5. {
  6. /**
  7. * Transform the resource into an array.
  8. *
  9. * @param \Illuminate\Http\Request $request
  10. * @return array
  11. */
  12. public function toArray($request)
  13. {
  14. $perm = parent::toArray($request);
  15. return $perm;
  16. }
  17. }

在我的应用程序中,这里是获取单个用户时结果示例的屏幕截图。注意多个角色的嵌套,在这些角色下有多个权限。查询单个用户时json响应的屏幕截图

展开查看全部

相关问题