laravel 多级分类展示:

#对象转数据概念

/**
	 * 对象 转 数组
	 *
	 * @param object $obj 对象
	 * @return array
	 */
	function object_to_array($obj) {
	    $obj = (array)$obj;
	    foreach ($obj as $k => $v) {
	        if (gettype($v) == 'resource') {
	            return;
	        }
	        if (gettype($v) == 'object' || gettype($v) == 'array') {
	            $obj[$k] = (array)object_to_array($v);
	        }
	    }
	 
	    return $obj;
	}
/**
     * @return array
     * 分类列表数据展示
     */
    public function Index(Request $request)
    {
        /*$data = Category::orderBy('id', 'asc')->get();
        if (!$data->count()) {
            return  $this->getResponse('' , ResponseCode::ERR_PARAMETER, '没有找到对应数据');
        }
        $parentList = array();
        foreach ($data as $key => $val) {
            if ($val['parent_id'] == 0) {
                $parentList [$key]['sort'] = $val['sort'];
                $parentList [$key]['id'] = $val['id'];
                $parentList [$key]['icon'] = url(EnumBase::IMGPATH . $val['icon']) ?? '';
                $parentList [$key]['descriptor'] = $val['descriptor'];
                $parentList [$key]['disable'] = $val['disable'];
                $parentList [$key]['created_at'] = $val['created_at'];
                $parentList [$key]['parent_id'] = $val['parent_id'];
                $parentList [$key]['category_name'] = $val['category_name'];
            } else {
                $children [$key]['sort'] = $val['sort'];
                $children [$key]['id'] = $val['id'];
                $children [$key]['icon'] = url(EnumBase::IMGPATH . $val['icon']) ?? '';
                $children [$key]['descriptor'] = $val['descriptor'];
                $children [$key]['disable'] = $val['disable'];
                $children [$key]['created_at'] = $val['created_at'];
                $children [$key]['parent_id'] = $val['parent_id'];
                $children [$key]['category_name'] = $val['category_name'];
            }
        }
        $parentList = array_values($parentList);
        if (!empty ($parentList) && !empty ($children)) {
            foreach ($parentList as $key => $list) {
                foreach ($children as $sk => $sl) {
                    if ($sl ['parent_id'] == $list ['id']) {
                        $parentList [$key] ['children'] [] = $children [$sk];
                    }
                }
            }
        }
        $data = ['list' => $parentList];
        return $this->getResponse('success' , ResponseCode::OK, $data);*/


        // 重写部分:

        $dataContent = Category::orderBy('id', 'asc')->get();

        foreach ($dataContent as $key => $val) {
            $arr [$key]['sort'] = $val['sort'];
            $arr [$key]['id'] = $val['id'];
            $arr [$key]['icon'] = url(EnumBase::IMGPATH . $val['icon']) ?? '';
            $arr [$key]['descriptor'] = $val['descriptor'];
            $arr [$key]['disable'] = $val['disable'];
            $arr [$key]['created_at'] = $val['created_at'];
            $arr [$key]['parent_id'] = $val['parent_id'];
            $arr [$key]['category_name'] = $val['category_name'];
        }
        $data = $this->get_attr($arr, 0);
        $num = count($data);
        //return $arr;
        //return adminResult("请求成功", 1, $num, $data);

        $data = ['num' => $num , 'data' => $data];
        return $this->getResponse('success' , ResponseCode::OK, $data);
//        return result($num, 0, $data);



    }


    //递归
    public function get_attr($a, $pid)
    {
        $tree = array();                                //每次都声明一个新数组用来放子元素
        foreach ($a as $v) {
            if ($v['parent_id'] == $pid) {                      //匹配子记录
                $v['children'] = $this->get_attr($a, $v['id']); //递归获取子记录
                if ($v['children'] == null) {
                    unset($v['children']);             //如果子元素为空则unset()
                }
                $tree[] = $v;                           //将记录存入新数组
            }
        }
        return $tree;                                  //返回新数组
    }

https://blog.csdn.net/weishuo110/article/details/80301209?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

 

第二种方法总结:

调用: $id = $request->id;
      $this->cate($id);

分享链接: https://blog.csdn.net/qq_44718170/article/details/108555482

//无限极分类接口1
    public function cate($id)
    {
        $data = Category::orderBy('id', 'asc')->get()->toArray();
        //return $this->success($this->getTree($id , $data));
        $res = $this->getTree($id , $data);

        header('Content-Type:application/json; charset=utf-8');
        echo (json_encode($res));die;

        // 这里必须加header 头文件,否则返回string 类型的json

        //header('Content-Type:application/json; charset=utf-8');
        //exit(json_encode($res,JSON_UNESCAPED_UNICODE));

        //header('Content-Type:application/json; charset=utf-8');
        //echo json_encode($res);
    }

    
function getTree($id,$array){
        //第一步 构造数据
        $items = array();
        foreach($array as $value){
            $items[$value['id']] = $value;
        }

        //第二部 遍历数据 生成树状结构
        $tree = array();
        foreach($items as $key => $value){
            if(isset($items[$value['parent_id']])){
                $items[$value['parent_id']]['son'][] = &$items[$key];
            }else{
                if((empty($id))||($id==$value['id']))
                    $tree[] = &$items[$key];
            }
        }
        return $tree;
    }

第三种方法:

地址: https://blog.csdn.net/cfun_goodmorning/article/details/77745304

$dataContent = Category::orderBy('id', 'asc')->get()->toArray();

$re = $this->array_to_tree($dataContent , 'id' , 'parent_id');
return response()->json($re);

   
//需要注意的是,$list数组的格式,是否符合递归的要求
    function array_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
    {
        // 创建Tree
        $tree = array();
        if (is_array($list)) {
            // 创建基于主键的数组引用
            $refer = array();
            foreach ($list as $key => $data) {
                $list[$key][$child] = [];
                $refer[$data[$pk]] =& $list[$key];
            }

            foreach ($list as $key => $data) {
                // 判断是否存在parent
                $parentId = $data[$pid];
                if ($root == $parentId) {
                    $tree[] =& $list[$key];
                } else {
                    if (isset($refer[$parentId])) {
                        $parent =& $refer[$parentId];
                        $parent[$child][] =& $list[$key];
                    }
                }
            }
        }
        return $tree;
    }

第四种方法:

$re = $this->tree();
return response()->json($re);


    public function tree($parentId = 0)
    {
        $rows = Category::where('parent_id', $parentId)->get()->toArray();
        $arr = array();

        if (sizeof($rows) != 0){
            foreach ($rows as $key => $val){
                $val['list'] = $this->tree($val['id']);
                $arr[] = $val;
            }
            return $arr;
        }

    }

第五种方法:

调用:

$dataContent = Category::orderBy('id', 'asc')->get();
$re = $this->getTree($dataContent , 'category_name');
return response()->json($re);


//一般传进三个参数。默认P_id=0;
    public function getTree($data,$field_name,$field_id="id",$field_pid="parent_id",$pid=0){
        $parentList = [];
        foreach ($data as $k => $v) {
            if($v->$field_pid == $pid) {
                //$v['_cate_name'] = $v[$field_name];
                //$arr[$k] = $data[$k];
                $parentList [$k]['sort'] = $v['sort'];
                $parentList [$k]['id'] = $v['id'];
                $parentList [$k]['icon'] = url(EnumBase::IMGPATH . $v['icon']) ?? '';
                $parentList [$k]['descriptor'] = $v['descriptor'];
                $parentList [$k]['disable'] = $v['disable'];
                $parentList [$k]['created_at'] = $v['created_at'];
                $parentList [$k]['parent_id'] = $v['parent_id'];
                $parentList [$k]['category_name'] = $v['category_name'];
                $parentList = array_values($parentList);
                foreach ($data as $k1 => $v1) {
                    if ($v1->$field_pid == $v->$field_id) {
                        //$v1['_cate_name'] = '|----'.$v1[$field_name];
                        //$parentList[$k]['children'][] = '|----'.$v1[$field_name];
                        $parentList[$k]['children'][] = $data [$k1];
                    }
                }
            }
        }
        return $parentList;
    }

第六种:

laravel 无限极分类

数据表结构

数据表结构

无限极分类查询

 $classifys = Classify::withCount('children',)
	 ->where('user_id',$user->id)
	 ->where('pid',$pid)
	 ->get();

模型

<?php

/**
 * Created by Reliese Model.
 * Date: Tue, 29 Oct 2019 03:58:39 +0000.
 */

namespace App\Models;

use Reliese\Database\Eloquent\Model as Eloquent;

/**
 * Class Classify
 * 
 * @property int $id
 * @property int $user_id
 * @property int $pid
 * @property string $name
 * @property \Carbon\Carbon $estimated_time
 * @property \Carbon\Carbon $created_at
 * @property \Carbon\Carbon $updated_at
 * @property string $deleted_at
 *
 * @package App\Models
 */
class Classify extends Eloquent
{
	use \Illuminate\Database\Eloquent\SoftDeletes;
	protected $table = 'classify';

	protected $casts = [
		'user_id' => 'int',
		'pid' => 'int'
	];


	protected $fillable = [
		'user_id',
		'pid',
		'name',
	];

    /**
 * 获取子模块
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
    public function childrenModule()
    {
        return $this->hasMany($this, 'pid', 'id');
    }

    /**
     * 递归获取子模块
     * @return mixed
     */
    public function children()
    {
        return $this->childrenModule()->with('children');
    }
}

 

第七种:laravel 商品无限级分类

链接模块: https://blog.csdn.net/qq_28114645/article/details/71713574


//商品类别查询
public function topParent()
{
    $where['commodType_depth'] = 1;
    $where['commodType_status'] = 1;
    $where['commodType_parentId'] = null;
    return $this->where($where)->get(['commodType_id', 'commodType_name']);
}

//商品分类子集递归查询
public function child($commodType_id)
{
    $arr[] = Array();
    $where['commodType_status'] = 1;
    $where['commodType_parentId'] = $commodType_id;
    if ($arr = $this->where($where)->get(['commodType_id', 'commodType_name'])) {
        foreach ($arr as $k => $v) {
            $arr[$k]['child'] = $this->child($v->commodType_id);
        }
    }
    return $arr;
}

//商品分类列表  无限级
public function commod_type_list()
{
    $arr = $this->topParent();
    if ($arr) {
        foreach ($arr as $k => $v) {
            $arr[$k]['child'] = $this->child($v->commodType_id);
        }
    }
    return $arr;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值