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)

获得的数据

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];这样形式的值了
用模型要怎么去改写了,或者用集合该怎么获取了.

阅读 2.9k
2 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进