laravel 关联模型的问题

发布于 2022-09-11 16:43:03 字数 1434 浏览 22 评论 0

刚开始学习laravel 的关联模型,被整的一头雾水,有时候真觉得都不如自己直接写sql方便。

现在遇到一个问题
角色表admin_roles 和 admin_permissions表是多对多关系.

中间表 admin_role_permissions 只有两个字段
role_id 和permission_id。分别对应着admin_roles和admin_permissions表的id。

现在我要查admin_roles 表中id为1,2时admin_permissions表对应id值,用sql可以这样写

SELECT
    DISTINCT`admin_role_permissions`.permission_id
FROM
    `admin_permissions`
INNER JOIN `admin_role_permissions` ON `admin_permissions`.`id` = `admin_role_permissions`.`permission_id`
WHERE
    `admin_role_permissions`.`role_id` IN (1, 2)

获得的数据

clipboard.png

用laravel 的模型该怎么写了,我用下面代码
AdminRoleController.php

$role_ids=['1','2'];
//relPermission为AdminRole模型中定义的一对多关系
 $permissions=AdminRole::with('relPermission')->whereIn('id',$role_ids)->get();

AdminRole.php

//定义多对多关联
    public function relPermission(){
        return $this->belongsToMany('App\Model\AdminPermission','admin_role_permissions','role_id','permission_id');
    }

执行的实际代码

clipboard.png
获取到的数据
clipboard.png

数据好复杂,层级太多,还没有去重,要怎么才能获取最上面sql执行的数据结果,不想去写原生sql
怎么才能查到Permissions=[1,2,5];这样形式的值了
用模型要怎么去改写了,或者用集合该怎么获取了.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风情万种。 2022-09-18 16:43:04

给你多一个选择,权限控制可以用 PHP-Casbin
支持 Laravel 的扩展Laravel-Authzhttps://github.com/php-casbin...
支持 rbac、uri权限、restful、中间件、缓存 等。

一抹淡然 2022-09-18 16:43:03

首先,要确定一点,模型关联是主要用于业务逻辑。
其次,并不一定要去强制使用关联模型,更何况像后台管理上面。
另外,你没有提供表结构表数据,其他人没法做进一步测试这也是你这个问题没有人回答的原因之一,问题描述也不够清楚。
最后,我取消了对这个问题的踩,同时也希望更多的人来讨论,至于为啥踩,在评论里面我已经说过了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文