先看下商品分類(lèi)的表結(jié)構(gòu)
CREATE TABLE `yoshop_category` (
`category_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '商品分類(lèi)ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '分類(lèi)名稱',
`parent_id` int unsigned NOT NULL DEFAULT '0' COMMENT '上級(jí)分類(lèi)ID',
`image_id` int unsigned NOT NULL DEFAULT '0' COMMENT '分類(lèi)圖片ID',
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '狀態(tài)(1顯示 0隱藏)',
`sort` int unsigned NOT NULL DEFAULT '0' COMMENT '排序方式(數(shù)字越小越靠前)',
`store_id` int unsigned NOT NULL DEFAULT '0' COMMENT '商城ID',
`create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '創(chuàng)建時(shí)間',
`update_time` int unsigned NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',
PRIMARY KEY (`category_id`),
KEY `store_id` (`store_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10018 DEFAULT CHARSET=utf8mb3 COMMENT='商品分類(lèi)表';
和商品分類(lèi)相關(guān)的接口
都是單表操作口予,所以SQL都很簡(jiǎn)單
查詢列表
商品分類(lèi)是個(gè)樹(shù)狀結(jié)構(gòu),所以增加了一個(gè)function節(jié)點(diǎn),根據(jù) parent_id 組裝子節(jié)點(diǎn)
接口返回的數(shù)據(jù)結(jié)構(gòu):
創(chuàng)建分類(lèi):
更新分類(lèi)
刪除分類(lèi)
至此一個(gè)標(biāo)準(zhǔn)的CRUD接口就開(kāi)發(fā)完成了,編碼烟馅、調(diào)試、部署在同一個(gè)界面完成然磷,相比傳統(tǒng)開(kāi)發(fā)方式的效率提升還是很明顯的
不爽的地方
在創(chuàng)建和更新的時(shí)候郑趁,前端傳過(guò)來(lái)的值都在 form 的嵌套屬性中,但有時(shí)候會(huì)攜帶一些數(shù)據(jù)庫(kù)無(wú)關(guān)的屬性姿搜。直接通過(guò)knex的 insert(msg.req.body.form) 時(shí)會(huì)報(bào)錯(cuò)
謹(jǐn)慎起見(jiàn)需要用 _.pick(msg.req.body.form, ["prop1", "prop2", ...]) 挑選出用到的屬性
這也是knex和其他orm框架相比不夠貼心的地方寡润,需要對(duì)操作的屬性細(xì)心呵護(hù),缺少對(duì)屬性的校驗(yàn)和類(lèi)型轉(zhuǎn)換支持舅柜,不支持模型層面的查詢scope悦穿,所以在 螢火商城 里基本每個(gè)查詢sql基本都要帶著 store_id = 10001 的條件
而且后面涉及到各種關(guān)聯(lián)查詢的時(shí)候,knex和orm的差異會(huì)更明顯