当前位置: 首页 > 知识库问答 >
问题:

Laravel支点的雄辩载荷关系

钱钊
2023-03-14

在我的网站中,我有用户、角色和权限。

每个用户属于多个角色(例如User.php)和称为“role_user”的数据透视表

public function roles()
{
    return $this->belongsToMany(Role::class);
}

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

public function permissions()
{
    return $this->belongsToMany(Permission::class);
}

我想以某种方式访问用户权限,但我似乎无法弄清楚。基本上,我需要这样的东西在User.php

public function permissions()
{
    return $this->roles()->permissions();
}

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

共有2个答案

邓威
2023-03-14

如果您使用的是JSON格式的结果,那么如果您实现了有说服力的资源,这应该非常容易

定义以下三种资源:

(注意:要轻松定义如下所示的资源,请执行:

php artisan make:resource UserRes

然后根据需要修改toArray函数。)

用户资源

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $user = parent::toArray($request);
        $user["roles"] = RolesRes::collection($this->roles);
        return $user;
    }
}

角色Resres

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class RolesRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $res =  parent::toArray($request);
        $res["permissions"] = $this->permissions;
        return $res;
    }
}

许可证:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PermissionsRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $perm = parent::toArray($request);
        return $perm;
    }
}

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

劳星晖
2023-03-14

Laravel对直接关系没有天生的支持。

我为此案例创建了一个包:https://github.com/staudenmeir/eloquent-has-many-deep

你可以这样使用它:

class User extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function permissions() {
        return $this->hasManyDeep(
            Permission::class, ['role_user', Role::class, 'permission_role']
        );
    }
}
 类似资料:
  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我正在编写php代码,对于当前的项目,我正在使用laravel框架(带有雄辩的ORM)。在这个项目中,我创建了两个表:用户和任务。我想在这些表之间创建一个“一对多”的关系。因此,一个用户可以有许多任务。在Tasks类中,我创建了方法所有者(): 但是当我以前得到用户名的时候 我得到这个异常:未定义的属性:illumb\Database\Eloquent\Relations\BelongsTo::$

  • 我有三种模式——博客、帖子、评论。博客有很多帖子,帖子有很多评论 当我写作时 它会给所有的博客发帖子和评论。但我将如何获得那些由管理员用户创建的博客,即评论表中的用户id。在哪里写入

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca

  • 我有以下三个表格: 帖子 帖子: 评论: 标签: Post表有许多注释,comments表有许多与之关联的标记。 如何使用“快速加载”将所有这些表组合在一起? 比如: 但是这个查询总是在标记关系中返回空响应。 我做错了什么? 期望的结果是这样的: 你可以看到帖子里面包含评论,评论里面也包含标签关系。 另外,我在我的项目中使用了“jenssegers/laravel mongodb”包,我试图在没有

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可