laravel 多级分类展示:

it2026-02-16  9

#对象转数据概念

/** * 对象 转 数组 * * @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; }

 

 

 

 

最新回复(0)