php - 在 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。
我该如何解决这个问题并获得期望的输出。
解决方案
如果您想预先加载嵌套关系,可以使用点分隔语法,例如:
User::with('roles.permissions')->find($id);
如果User
模型已经被实例化,那么您可以使用该load()
方法(延迟加载):
$user->load('roles.permissions');
推荐阅读
- mongodb - 如何在mongodb的字段中插入元数据
- sql-server - 寻找动态存储过程,用于多个查询
- google-apps-script - Google Chat API:从机器人中删除消息会出现 401 错误
- python - 使用 Select Widget 问题更新绘图
- oauth-2.0 - BotFramework 通过 OAuth 2.0 与 PingFederate 集成?
- ruby - 如何让 CocoaPods 使用最新的 ruby 版本?
- python - 我对带有 Python Selenium 的 Instagram 之类的机器人有疑问
- android - 如何显示在android中播放的音乐的歌词
- scala - Long 在 scalafiddle 上只允许 10^9
- swift - NSNotification 观察者不会被删除,除非它被触发一次