无限级分类
文章原文 : 这里主要做记录
https://www.cnblogs.com/zhangcheng001/p/12143585.html
无限级分类
public static function getList($pid = 0, &$result = [], $blank = 0)
{
$res = Db::name('category')->where('pid', $pid)->select();
// 自定义分类名称前面的提示
$blank += 2;
// 遍历分类表
foreach ($res as $key => $value) {
// 自定义分类名称的显示格式
$cate_name = '|--' . $value['name'];
$value['name'] = str_repeat(' ', $blank) . $cate_name;
// 将查询到的结果保存到$result中
$result[] = $value;
// 将当前记录的id,作为下一级分类的父id,继续递归调用本方法
self::getList($value['id'], $result, $blank);
}
// 返回查询结果,调用结果集类make方法打包当前结果,转为二维数组返回
return Collection::make($result)->toArray();
}
无限级删除
控制器内的
// 删除
// 在执行del方法之前 先执行delson
protected $beforeActionList = [
'delson' => ['only' => 'del']
];
// 删除父级
public function del()
{
$id = input('id');
$res = model('Cate')->where('id', $id)->delete();
if ($res) {
$this->success('删除成功!', 'admin/cate/cateList');
} else {
$this->error('删除失败!');
}
}
// 删除下级分类
public function delson()
{
// 获取当前id
$cateid = input('id');
// 判断删除子类
$res = model('Cate')::delnext($cateid); //调用模型中的方法 查找子类
// 将当前删除的id存放到子类id集合中
$res[] = $cateid;
// 删除栏目
$result = model('Cate')->destroy($res);
if ($result) {
$this->success('删除成功!', 'admin/cate/cateList');
} else {
$this->error('删除失败!');
}
}
模型中的方法
// 删除操作 无限级查找子类
/**
* Undocumented function
*
* @param [type] $cateid //当前删除的id
* @param array $result //静态数组集合
* @return void
*/
public static function delnext($cateid, &$result = [])
{
// 查询所有数据
$data = self::select(); //查询所有父id为当前id的子类
foreach ($data as $v) {
if ($v['pid'] == $cateid) {
$result[] = $v['id']; //如果有,将这些数据的id放入数组中
self::delnext($v['id'], $result); //根据这些数据的id继续调用自身
}
}
return $result;
}
觉得有用请点击呦