1. 什么是无限分类
无限分类又称为多级分类,是指在一个分类表中,每个分类都可以有无限的下级分类,形成一个树状结构。
2. 数据表结构
我们先来看一下无限分类所需要的数据表结构:
CREATE TABLE `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
其中,id为自增主键,name为分类名称,parent_id为父级分类的id,如果当前分类没有父级分类,则parent_id字段为NULL。
3. 实现方法
3.1. 获取所有分类
$categories = \DB::table('categories')->select('id', 'name', 'parent_id')->get();
使用Laravel框架自带的查询构建器来获取数据库中的所有分类,其中select()方法用于指定查询的字段,get()方法用于获取所有分类记录,具体操作详见Laravel官方文档。
3.2. 构建分类树
/**
* 构建分类树
*
* @param array $categories 所有分类数组
* @param int $parentId 父级分类id
* @return array
*/
public function buildCategoryTree(array $categories, int $parentId = 0)
{
$result = [];
foreach ($categories as $category) {
if ($category->parent_id === $parentId) {
$children = $this->buildCategoryTree($categories, $category->id);
if (!empty($children)) {
$category->children = $children;
}
$result[] = $category;
}
}
return $result;
}
在构建分类树的方法中,我们首先初始化一个空数组$result,然后使用foreach循环遍历所有分类,当当前分类的parent_id等于指定的parentId时,将该分类加入数组$result中,然后递归调用构建分类树的方法,将当前分类的id作为parentId传入,获取它的子分类,如果有子分类,则将子分类挂在当前分类的children属性上,最后返回结果数组。
3.3. 实例化Category类
$categories = \DB::table('categories')->select('id', 'name', 'parent_id')->get();
$category = new Category();
$categoryTree = $category->buildCategoryTree($categories);
首先使用查询构建器获取所有分类,然后实例化Category类,调用buildCategoryTree()方法,将所有分类作为参数传入,即可获取一个以树形结构组织的分类数组$categoryTree。
4. 小结
通过以上方法,我们就可以快速、简便地实现无限分类功能。在实际应用中,我们可以使用分类树来构建商品分类、新闻分类等功能。