1. 前言
前面總結(jié)了商品模塊的基礎(chǔ)課程,本節(jié)將總結(jié)L06課程中的商品模塊進(jìn)階內(nèi)容——商品類目。
課程傳送門
2. 功能分析
商品按類目分類,實(shí)現(xiàn)面包屑導(dǎo)航。
2.1 需求分析
實(shí)現(xiàn)面包屑導(dǎo)航,商品可以按照類目劃分/搜索。

面包屑導(dǎo)航-效果圖
2.2 表設(shè)計(jì)
- 實(shí)現(xiàn)邏輯
新建一個(gè)商品類目表,保存類目之間的上下級(jí)關(guān)系;商品表與商品類目表關(guān)聯(lián); - 表設(shè)計(jì)
類目之間存在上下級(jí)關(guān)系,需要保存當(dāng)前類目的上級(jí)類目 parent_id ,當(dāng)前類目層級(jí) level;
課程中,很巧妙地用 path 字段,保存了當(dāng)前類目的所有上級(jí)類目id,減少了遞歸查詢上級(jí)類目;
具體表結(jié)構(gòu)如下:
# 類目表
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, # 上級(jí)類目ID
`is_directory` tinyint(1) NOT NULL, # 是否擁有下級(jí)類目
`level` int(10) unsigned NOT NULL, # 當(dāng)前類目層級(jí)
`path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 當(dāng)前類目所有上級(jí)類目id
`created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時(shí)間
`updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
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
- 代碼借鑒
本章節(jié)的代碼質(zhì)量也是很贊,有很多巧用。
- 類目表中的 parent_id 設(shè)置了聯(lián)級(jí)刪除外鍵,也就是當(dāng)上級(jí)類目被刪除時(shí),下級(jí)類目也會(huì)一起被刪除(刪除時(shí)加上提醒會(huì)更貼心哦);
- laravel-admin 異步加載下拉框,以及查詢數(shù)據(jù)重組,很強(qiáng)大;
- 類目樹的數(shù)據(jù)結(jié)構(gòu)
- viewComposer的使用,向指定模板文件注入變量;