1. 前言
前面總結(jié)了商品模塊的基礎(chǔ)課程旗扑,本節(jié)將總結(jié)L06課程中的商品模塊進(jìn)階內(nèi)容——商品類目维哈。
課程傳送門
2. 功能分析
商品按類目分類例隆,實(shí)現(xiàn)面包屑導(dǎo)航阔逼。
2.1 需求分析
實(shí)現(xiàn)面包屑導(dǎo)航论巍,商品可以按照類目劃分/搜索烛谊。
2.2 表設(shè)計(jì)
- 實(shí)現(xiàn)邏輯
新建一個商品類目表,保存類目之間的上下級關(guān)系嘉汰;商品表與商品類目表關(guān)聯(lián)丹禀; - 表設(shè)計(jì)
類目之間存在上下級關(guān)系,需要保存當(dāng)前類目的上級類目 parent_id 鞋怀,當(dāng)前類目層級 level双泪;
課程中,很巧妙地用 path 字段密似,保存了當(dāng)前類目的所有上級類目id焙矛,減少了遞歸查詢上級類目;
具體表結(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, # 上級類目ID
`is_directory` tinyint(1) NOT NULL, # 是否擁有下級類目
`level` int(10) unsigned NOT NULL, # 當(dāng)前類目層級
`path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 當(dāng)前類目所有上級類目id
`created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時間
`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
- 代碼借鑒
本章節(jié)的代碼質(zhì)量也是很贊残腌,有很多巧用村斟。
- 類目表中的 parent_id 設(shè)置了聯(lián)級刪除外鍵,也就是當(dāng)上級類目被刪除時废累,下級類目也會一起被刪除(刪除時加上提醒會更貼心哦)邓梅;
- laravel-admin 異步加載下拉框,以及查詢數(shù)據(jù)重組邑滨,很強(qiáng)大日缨;
- 類目樹的數(shù)據(jù)結(jié)構(gòu)
- viewComposer的使用,向指定模板文件注入變量掖看;