繼昨天我們完成了客製化保健食品 Module 的建立,今天首要目標就是將此
Module`與 使用者做關聯。
在 MedusaJS 規則中,並不可以直接利用customer Model
與 客製化保健食品 Model
直接關聯,是需要建立Module
與Module
關聯,然後系統會起另外建立一張資料表,儲存各個ID
。
以下介紹一下,在 MedusaJS 當中,對 Module 進行關聯,怎麼去建立一對多、多對多、一對一關聯。
首先,MedusaJS 建立關聯性通常都會使用defineLink
來建立,這樣可以讓他辨識到有此關聯。
linkable
就可以建立。export default defineLink(
SupplementModule.linkable.supplement,
CustomerModule.linkable.customer
)
Module
是可多選的(List
)的export default defineLink(
{
linkable: CustomerModule.linkable.customer,
isList: true,
},
{
linkable: SUPPLEMENT_MODULE.linkable.supplement,
isList:true
}
)
除了關聯性之外,還有方向的差異,因為關聯的原因有不同,例如以下:
Subtitle
資料模型,接著再把它跟商品 (Product) 資料模型建立連結。//讀順序就是,從ProductModule 新增 BlogModule 的 subtitle。
export default defineLink(
ProductModule.linkable.product,
BlogModule.linkable.subtitle
)
Module
與Module
之間建立關聯性。//讀取順序就是,將自訂 BlogModule 與 ProductModule 進行關聯。
export default defineLink(
BlogModule.linkable.post,
ProductModule.linkable.product
)
這樣寫法讓可以理解的人增加解讀性,但是還是有註解會比較好!!
所以我們SupplementModule
與CustomerModule
怎麼建立關聯性呢??
我的想法是如下的:
import SUPPLEMENT_MODULE from "../modules/supplements"
import CustomerModule from "@medusajs/medusa/customer"
import { defineLink } from "@medusajs/framework/utils"
//supplement-customer.ts
//客戶對客製化保健食品提出需求,一個客戶是可以提出多個需求的。
// 且需求是建立在客戶之下,所以是 CustomerModule 起頭。
export default defineLink(
{
linkable: CustomerModule.linkable.customer,
isList: true,
},
SUPPLEMENT_MODULE.linkable.supplement,
)
對了❗,忘記說這一種檔案要放在哪裡了....
請將對Module
間建立關聯的檔案放在src/links
當中。
接下來就是讓資料庫進行更新,在Terminal
輸入以下指令讓資料庫進行更新。
npx medusa db:migrate
成功~~~
明天我們就建立流程workflow
~~