iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Modern Web

Medusa.js 石化我的心系列 第 18

Day18 進階實作 - 關聯

  • 分享至 

  • xImage
  •  

繼昨天我們完成了客製化保健食品 Module 的建立,今天首要目標就是將此Module`與 使用者做關聯。

關聯

在 MedusaJS 規則中,並不可以直接利用customer Model客製化保健食品 Model直接關聯,是需要建立ModuleModule關聯,然後系統會起另外建立一張資料表,儲存各個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
	}
)

除了關聯性之外,還有方向的差異,因為關聯的原因有不同,例如以下:

  • 如果你想在商品 (Product) 資料模型裡新增一個 subtitle 自訂欄位,你可以先在自己的模組裡定義一個 Subtitle 資料模型,接著再把它跟商品 (Product) 資料模型建立連結。
//讀順序就是,從ProductModule 新增 BlogModule 的 subtitle。
export default defineLink( 
	ProductModule.linkable.product, 
	BlogModule.linkable.subtitle
)
  • 如果是想單純對於ModuleModule之間建立關聯性。
//讀取順序就是,將自訂 BlogModule 與 ProductModule 進行關聯。
export default defineLink( 
	BlogModule.linkable.post, 
	ProductModule.linkable.product
)

這樣寫法讓可以理解的人增加解讀性,但是還是有註解會比較好!!

所以我們SupplementModuleCustomerModule怎麼建立關聯性呢??
我的想法是如下的:

  • 客戶對客製化保健食品提出需求,一個客戶是可以提出多個需求的。
  • 且需求是建立在客戶之下,所以是 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

成功~~~
https://ithelp.ithome.com.tw/upload/images/20251003/20178157zd0Sn6gwsT.png

下集預告

明天我們就建立流程workflow~~


上一篇
Day17 進階實作 - 客製化模組 新增專屬保健單
下一篇
Day19 進階實作 - WorkFlow
系列文
Medusa.js 石化我的心21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言