laravel 关联模型的问题
刚开始学习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)
获得的数据
用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');
}
执行的实际代码
获取到的数据
数据好复杂,层级太多,还没有去重,要怎么才能获取最上面sql执行的数据结果,不想去写原生sql
怎么才能查到Permissions=[1,2,5];这样形式的值了
用模型要怎么去改写了,或者用集合该怎么获取了.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
给你多一个选择,权限控制可以用 PHP-Casbin
支持 Laravel 的扩展
Laravel-Authz
:https://github.com/php-casbin...支持 rbac、uri权限、restful、中间件、缓存 等。
首先,要确定一点,模型关联是主要用于业务逻辑。
其次,并不一定要去强制使用关联模型,更何况像后台管理上面。
另外,你没有提供表结构表数据,其他人没法做进一步测试这也是你这个问题没有人回答的原因之一,问题描述也不够清楚。
最后,我取消了对这个问题的踩,同时也希望更多的人来讨论,至于为啥踩,在评论里面我已经说过了。