使用 sequelize --underlined 時的小迷思

使用 sequelize --underlined 時的小迷思

什麼是 --underlined ?

在撰寫 javascript 程式碼時,我們會將變數以小駝峰(lower Camel Case)的方式命名,例如 lastname 會以 lastName 方式命名,增加可讀性。

但資料庫的變數命名慣例是以蛇形法(snake_case)命名,同樣的 lastname 變數在資料庫就會以 last_name 的名字存在。

這個時候就會出現一個問題,要怎麼在 javacript 用 lastName 取得資料表的 last_name 欄目呢?

答案就是 underlined!

underlined 是 sequelize 提供的變數轉換工具,只要在使用 sequelize cli 時,輸入 --underlined 就能協助在 model 跟資料表間自動進行變數的交流。

於是我們在終端機輸入以下來指令來產生 migration 跟 model :

npx sequelize model:generate --name User --attributes firstName:string,lastName:string --underscored

按下 Enter 後產生了兩個檔案:

migration 檔是用來跟資料庫溝通的檔案,sequelize 會協助把 migration 檔案裡的操作轉換成 SQL 指令去操作資料庫,但仔細看,除了系統生成的 created_at 跟 updated_at,其他變數名稱怎麼還是小駝峰命名法?上面不是說會自動轉換命名方式嗎?

這就是 --underlined 弔詭的地方了!

migration 檔案還是需要自己動手修改

為什麼會這樣呢?根據 github 社群上的說法,原始碼就沒有寫 migration 屬性名字的轉換:

原始碼是這樣寫的:

綜上所述,在建立 migration 時它不會幫你轉換,但後續在 node.js 跟資料庫溝通又可以實現自動轉換,換句話說,sequelize 絕對有能力在建立 migration 時幫你轉換,但他就是不做,非常可惜。

如何正確使用 --underlined?

  1. 建議用小駝峰式命名法來建立 migration 跟 model。
  2. 產生後再去手動修改 migration 檔,把小駝峰式命名法改為蛇行式命名法。
特別注意:
underlined 會轉換變數中所有的大寫字母,
也就是說如果變數名字有大寫字母的話,手動修改時要記得全部改為下底線!
例如:
cardImageId --> card_image_id