1. 前言
前面总结了商品模块的基础课程,本节将总结L06课程中的商品模块进阶内容——商品类目。
课程传送门
2. 功能分析
商品按类目分类,实现面包屑导航。
2.1 需求分析
实现面包屑导航,商品可以按照类目划分/搜索。
2.2 表设计
- 实现逻辑
新建一个商品类目表,保存类目之间的上下级关系;商品表与商品类目表关联; - 表设计
类目之间存在上下级关系,需要保存当前类目的上级类目 parent_id ,当前类目层级 level;
课程中,很巧妙地用 path 字段,保存了当前类目的所有上级类目id,减少了递归查询上级类目;
具体表结构如下:
# 类目表
CREATE TABLE `categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 类目名称
`parent_id` int(10) unsigned DEFAULT NULL, # 上级类目ID
`is_directory` tinyint(1) NOT NULL, # 是否拥有下级类目
`level` int(10) unsigned NOT NULL, # 当前类目层级
`path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 当前类目所有上级类目id
`created_at` timestamp NULL DEFAULT NULL, # 创建时间
`updated_at` timestamp NULL DEFAULT NULL, # 更新时间
PRIMARY KEY (`id`),
KEY `categories_parent_id_foreign` (`parent_id`),
CONSTRAINT `categories_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
# 商品表
ALTER TABLE `products` ADD `category_id` int(10) unsigned DEFAULT NULL; # 所属类目ID
- 代码借鉴
本章节的代码质量也是很赞,有很多巧用。
- 类目表中的 parent_id 设置了联级删除外键,也就是当上级类目被删除时,下级类目也会一起被删除(删除时加上提醒会更贴心哦);
- laravel-admin 异步加载下拉框,以及查询数据重组,很强大;
- 类目树的数据结构
- viewComposer的使用,向指定模板文件注入变量;