首先创建五个模型(在每个模型里面声明主键)
创建的五个模型分别为 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;
}
}