Node.js sequelize研究

關於
Node.js其中有一個項目叫sequelize,在學習的過程中,記錄當下學習的理解與心得,所以會以類似API文件的方式進行撰寫,但又不完全以官方的文件直接翻譯,主要是給自己看,也可以給別人一些參考,理解過程中不一定百分之百都是正確的,有不正確的地方也歡迎提出自己的想法與大家切磋交流。
貼文分類
誰來我家
  • 10-27  訪客(157.55.39.*)
  • 10-27  訪客(18.234.97.*)
  • 10-26  訪客(54.36.148.*)
  • 10-25  訪客(114.46.33.*)
參觀人氣
本日人氣: 2
累積人氣: 1,119
分享 推播通知
目前身份: 訪客

 

資料表名稱是在哪裡定義的?這也是當初我一直困惑很久的,搞不清楚它是怎麼回事,只覺的奇怪。

 

其實是這樣的。上面的白箭頭,它是Model 的名稱,但是它又是資料表的名稱,甚麼意思呢?

 

就是它同時是Model的名稱,又同時是資料表的名稱,也就是它幫你做自動對映了。

 

還不止這樣,你的資料表名稱不是叫users嗎?但它上面是叫「User」不一樣阿!?

 

對,因為它會自動幫你加上複數s,也就是它會自動變成users,它就找到資料表了。

 

如果你不想要讓它自動為你的資料表加上s(複數),要如何做呢?就定義 freezeTableName這個參數,設定成 true ,就不會自動幫你加上s了

 

sequelize.define('User', {
// ... (attributes)
}, {
freezeTableName: true
}); 

 

const sequelize = new Sequelize('sqlite::memory:', {
define: {
freezeTableName: true
}
}); 

 

但是這種設計我個人是覺的有點雞婆,很容易混肴,程式碼又沒省到多少,重疊的定義實際上造成2個缺點

1、初學者來看,不容易理解

2、到底是有加s還是沒加s,最後還是得去資料庫去確認,實在是沒必要

 

當然可以理解作者可能是出自於好意,自動幫你做掉複數這個功能,因為資料表在定義時,常常有時有加s,有時沒加s,到底是要加s還是不要加s,他幫你們做掉,你們就不用考慮這些了。

 

但是對於程式的嚴謹角度來看,勢必還是要定義清楚、不要有模糊猜測的空間, 還是比較好的。

 

所以它又提供了這個 freezeTableName 變數讓你去凍結自動加上複數s的功能。

 

如果要直接指定資料表名稱,要如何做呢?

sequelize.define('User', {
// ... (属性)
}, {
tableName: 'users'
}); 

 這樣就是很明確了

Node.js sequelize研究 發表在 留言 (0) 人氣 (91)
第02章 Model基礎
分享給朋友
網址

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

載入中...