Node.js sequelize研究

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

     

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

     

    其實是這樣的。上面的白箭頭,它是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) 人氣 (226)
    第02章 Model基礎
    分享給朋友
    網址

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

    載入中...