首先建表:
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(10) NOT NULL,
`pid` int(11) NOT NULL,
`level` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4
插入如下数据:
原理概要:
首级分类默认是pid为0,pid 是父ID的意思,其实分类就是爸爸找儿子,儿子找爸爸这么回事儿。
比如上面的,(注意英文我是随便写的,都是错的,没必要在意)
id字段就是代表父亲,pid代表儿子属于哪个父亲,看上图pid等于1的,在找到id等于1的clothes,也就是说clothes有两个儿子
废话少说,直接上代码
class Category
{
public function getCate()
{
$data = CA::all();
$results = $this->returnFc($data);
return $results;
}
public function returnFc($data,$pid=0)
{
$tree = array();
foreach($data as $k => $v)
{
if($v['pid'] == $pid)
{ //父亲找到儿子
$v['child'] = $this->returnFc($data, $v['id']);
$tree[] = $v;
}
}
return $tree;
}
}
以上代码中的CA是一个Category模型,也就是开头的那个表了,用命名空间引入即可。
我习惯定义路由,跑前后分离,所以我用postman来测试了一下,如下图:
这个层次感,可以满足业务需求了,这是ID为1的,一共有3级,至于 你想要多少级,你在添加分类 的时候只需要把父亲指定就行了。