ThinkPHP 模型关联(RBAC)

首先创建五个模型(在每个模型里面声明主键)

创建的五个模型分别为 User、Role、User_role、Node、Role_node

在User模型中创建一个方法  多对多模型关联

 public function userRole()
    {
        // 第一个表示关联的模型、第二个表示中间表、第三个表示外键、第四个表示当前表主键
        return $this->belongsToMany(role::class, 'user_role','rid','uid');
    }

在Role模型中创建一个方法  多对多模型

public function roleNode()
    {
        // 第一个表示关联的模型、第二个表示中间表、第三个表示外键、第四个表示当前表主键
        return $this->belongsToMany(node::class, 'role_node','nid','rid');
    }

然后在控制器中处理

public function index()
    {
        第一个是模型方法、第二个表示要关联的模型方法
        $data=User::with(['userRole','userRole.roleNode'])->where('uid','=',2)->select()->toArray();
        $list=$data[0]['userRole'][0]['roleNode'];
        // 递归处理
        dd(get_cate_list($list));
            
    }

封装递归处理函数法方法

if(!function_exists("get_cate_list")){
    //返回无限级分类菜单
    function get_cate_list($list,$pid=0,$f=0){
        //声明一个静态数组存储处理后的数据
        static $arr = [];
        foreach($list as $val){
            if($val['pid']==$pid){
                $val['level'] = $f;
                $arr[]=$val;
                get_cate_list($list,$val['nid'],$f+1);
            }
        }
        return $arr;
    }
}

posted @ 2023-01-27 18:44  哎呀呀哈  阅读(44)  评论(0)    收藏  举报  来源