首页 > 解决方案 > 在 Laravel eloquent 中使用中间关系过滤数据透视表数据

问题描述

我正在研究 laravel 中的访问控制级别(ACL)。这是,两个pivot表一个role_user是代表的each users roles,另一个permission_role是代表的each roles permissions。现在我想从模型中获取permission_role数据透视表数据。User

我的代码示例。

In User Model

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

In Role Model

public function users()
{
    return $this->belongsToMany(User::class);
}

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

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

我正在尝试这种方式: -

$user->roles->with('permissions')->get();

它显示 BadMethodException。

我该如何解决这个问题并获得期望的输出。

标签: phplaraveleloquent

解决方案


如果您想预先加载嵌套关系,可以使用点分隔语法,例如:

User::with('roles.permissions')->find($id);

如果User模型已经被实例化,那么您可以使用该load()方法(延迟加载):

$user->load('roles.permissions');

急切加载文档


推荐阅读