分享 推播通知
目前身份: 訪客

在預設中,Sequelize 會自動增加2 個欄位「createdAt」和「updatedAt」在model中。這2個欄位資料型態是用 DataTypes.DATE , 覺的它很雞婆的就在下方按讚。

 

為什麼說它很雞婆呢?首先先說他原本的用意,他是想說每次新增資料時,一定會有一個欄位是叫建立時間的,那麼他就幫你自動加上這個欄位,你就不用再定義這個欄位了,他幫你安排好,讓你不用多建欄位,他是這個好意。

 

那麼更新資料時,一定會有一個更新的時間,他也幫你自動建立好,那你就不用額外再去定義一個更新時間的資料欄位,他是好意。

 

他是好意,沒錯,但卻造成了我的困擾。

 

為什麼造成了我的困擾,原因有2點:

1、並不是所有的資料表都一定要有建立時間、更新時間這二個欄位

 

2、若要有建立時間、更新時間,但我並不是要你這種名稱「createdAt」,我可能要的是這種的「create_at」或是「at_create」或是「create_date」,當我所有的資料欄位型態都是沒有大寫出現的,突然你給我自動加上這種欄位名稱有大寫的,是不是很破壞我的整理設計?

 

那麼如何關掉自動加上這2個欄位呢?它也是有方法的

sequelize.define('User', {
// ... (attributes)
}, {
timestamps: false
}); 

 timestamps: false 設定成false,它就不會自動加上這2個欄位了

 

當然你不想要updatedAt的名稱,可不可以自定義?可以

class Foo extends Model {}
Foo.init({ /* attributes */ }, {
  sequelize,

  // don't forget to enable timestamps!
  timestamps: true,

  // 我不想要 createdAt 這個欄位
  createdAt: false,

  // 我想要 updatedAt 這個欄位,但我希望它的名稱是叫「updateTimestamp」
  updatedAt: 'updateTimestamp'
});

 

但是在實務上,我在做define的過程中,所有的資料表都要額外去定義

timestamps: false, 

 

所以我稱它為雞婆,多此一舉。

其實前幾節也有談到自動為資料表加上複數(s)的事,也是一樣

我都要額外去加上

freezeTableName: true, 

意思就是禁止自動為資料表加上複數(s)

1
人氣 2899
NodeJS 發表在 留言 (0) 人氣 (2899)
第02章 Model基礎
分享給朋友
網址

想對外分享這則貼文嗎?運用網址更方便呦~

載入中...