【发布时间】:2019-05-06 02:18:54
【问题描述】:
我有一个关于 Laravel 关系的问题。
我有一个原始的联合查询,我想翻译成一个雄辩的关系。
首先...我有 4 张桌子:
角色
id|name
权限
id|name|code|description
permission_role
role_id|permission_id
用户
id|...........|role_id
permission_user
user_id|permission_id
在我的用户模型中,我有这个方法:
/**
* @TODO: Transform this into a eloquent relationship
*
* @return Collection
*/
public function permissions()
{
$query = sprintf('
(
SELECT permissions.*
FROM permissions
INNER JOIN permission_role ON permission_role.permission_id = permissions.id
WHERE permission_role.role_id = %s
) UNION
(
SELECT permissions.*
FROM permissions
INNER JOIN permission_user ON permission_user.permission_id = permissions.id
WHERE permission_user.user_id = %s
)', $this->role_id, $this->id);
return Permission::hydrate(DB::select($query));
}
关键是,我想通过用户关联的角色获取所有权限,以及与用户关联的单独权限。
我可以将其转换为一些雄辩的关系,例如 hasMany、belongsToMany 等...?
【问题讨论】:
-
我正在构建一个完整的 API,所以我正在使用护照范围生成具有权限的令牌(作为范围),我已经完成了所有工作,我只是想改进此代码
标签: php laravel laravel-5 eloquent