laravel model中无限分类递归 与 展示select 树形菜单 升级版 二

前言:

每次做权限管理都在郁闷别人后台的相关配置,每一个后台总是有差异需求,但是万变不离其宗,我们还是逃脱不了 常识性的无线分类递归  与 菜单树的限制 ,这里 为自己,他人总结出来了laravel 中自己个人常用的两种方法,用的时候直接拷贝就行了。

如果你有疑问 联系我qq无疑是最好的选择2097724800 上班专业q,这里 只粗暴的显示代码和用法 并没有给出你想看到的效果图,有句话是【绝知此事要躬行】。

如果你有更好的方法,一定要联系我分享哦,如果你用我的 那希望你支持我哦,点点赞

 

前提:

使用常见的数据库设计结构 id,name,pid,[status],[type],[route],[desc],[created_at],[updated_at],[deleted_at],

第一种方法

先说一种方法吧  使用with渴求式 查询加载

直接贴代码 粗暴

使用方式:

 public static function GetAllMenuTree($pid=0 , &$arr)
    {
        $arr = self::query()
            ->select('id','name','pid','type','route')
            ->where('pid',$pid)
            ->where('status','Y')
            ->with(['menus'])
            ->get()->toArray();
    }

加工方式:


    public function menus()
    {
        return $this->hasMany(self::class,'pid','id')
            ->select('id','name','pid','type','route')
            ->whereStatus('Y')
            ->with(['menus']);
    }

 

第二种方法

 一、将要用到的数据查询出来 list成列表 无需处理

这个无须多言 贴段代码案例

public static function GetAdminMenuTree($m_id)
    {

        $list = self::query() //DB::table('admin_manage_node')
            ->leftJoin('admin_node','admin_manage_node.n_id','admin_node.id')
            ->select('admin_node.id','admin_node.name','admin_node.route','admin_node.pid')
            ->where(['admin_manage_node.m_id'=>$m_id,'admin_node.type'=>'menu'])
            ->get()
            ->toArray();

        $tree = [];

        self::ListToTree($list,'id','pid','children',0,$tree);

        return $tree;
    }

二、使用我已经封装过的树状图处理函数

public static function ListToTree($list, $primaryKey='id', $parentKey = 'pid', $childStr = 'children', $root = 0 ,array &$tree)
    {

        if (is_array($list)) {

            //创建基于主键的数组引用
            $refer = array();

            foreach ($list as $key => $data) {
                $refer[$data[$primaryKey]] = &$list[$key];
            }

            foreach ($list as $key => $data) {

                //判断是否存在parent
                $parantId = $data[$parentKey];

                if ($root == $parantId) {


                    $tree[] = &$list[$key];

                } else {

                    if (isset($refer[$parantId])) {
                        $parent = &$refer[$parantId];
                        $parent[$childStr][] = &$list[$key];
                    }

                }
            }
        }

        return $tree;
    }

 就是这么简单

你可能感兴趣的:(php)