Sequelize 中文文檔 v4 - Upgrade to V4 - 升級到 V4

Upgrade to V4 - 升級到 V4

此係列文章的應用示例已發佈於 GitHub: sequelize-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.html

Sequelize V4 是一個重要版本,它引入了新的功能和突破性的變化。 大量的 sequelize 代碼庫已用 ES2015 功能重構。 如下指南列出了從 v3 升級到 v4 的一些更改。查看 修改日誌 查看所有詳細列表。node

突破性變化

  • Node 版本: 要使用新的 ES2015 功能,咱們如今至少須要 Node4。從如今開始,咱們將支持全部當前的LTS版本的Node。
  • 計數器緩存插件以及所以關聯的計數器緩存選項已被刪除。 使用 afterCreateafterDelete 鉤子能夠實現相同的行爲。
  • 刪除了MariaDB方言。 這只是圍繞 MySQL 的一個淺層包裝,因此使用 dialect:'mysql 而不是進一步的改變。
  • 刪除默認的 REPEATABLE_READ 事務隔離。 隔離級別如今默認爲數據庫的級別。 在啓動事務時明確地傳遞所需的隔離級別。
  • 刪除了對 pool: false 的支持。要使用單個鏈接,請將 pool.max 設置爲1。
  • (MySQL)當數字太大時,BIGINT 如今被轉換爲字符串。
  • 刪除了對referencesKey的支持,使用了一個引用對象。mysql

    references: {
        key: '',
        model: ''
    }
  • classMethodsinstanceMethods 已被移除。

之前:git

const Model = sequelize.define('Model', {
    ...
}, {
    classMethods: {
        associate: function (model) {...}
    },
    instanceMethods: {
        someMethod: function () { ...}
    }
});

如今:github

const Model = sequelize.define('Model', {
    ...
});

// 類方法
Model.associate = function (models) {
    ...associate the models
};

// 實例方法
Model.prototype.someMethod = function () {..}
  • Model.Instanceinstance.Model 已被移除。要從一個實例訪問模型,只需使用 instance.constructor。 示例類 (Model.Instance) 如今是模型自己。
  • Sequelize 如今使用一個 bluebird 庫的獨立副本.sql

    • sequelize返回的 promise 如今是 Sequelize.Promise 而不是 bluebird 的全局 Promise 實例。
    • CLS 補丁不會影響 bluebird 的全局 promise。當與 Promise.all 和其餘 bluebird 方法一塊兒使用時,事務不會自動傳遞給方法。明確地修補 bluebird 實例,可讓 CLS 可以使用 bluebird 方法。數據庫

      $ npm install --save cls-bluebird
const Promise = require('bluebird');
const Sequelize = require('sequelize');
const cls = require('continuation-local-storage');
const ns = cls.createNamespace('transaction-namespace');
const clsBluebird = require('cls-bluebird');
clsBluebird(ns, Promise);
Sequelize.useCLS(ns);
  • Sequelize.Validator 如今是 validator 庫的獨立副本
  • DataTypes.DECIMAL 對於 MySQL 和 Postgres 返回的是字符串.
  • DataTypes.DATE 如今使用 DATETIMEOFFSET 而不是 DATETIME2 sql數據類型,以防MSSQL記錄時區。要將現有的 DATETIME2 列遷移到 DATETIMEOFFSET 中, 查看 #7201.
  • options.order 如今只接受數組類型或 Sequelize 方法的值。 原限支持的字符串值(即{order:'name DESC'})已被棄用。
  • 使用 BelongsToMany 關係 add / set / create 設置器如今經過將它們傳遞爲 options.through 來設置屬性(之前的第二個參數被用做經過屬性,如今它被認爲是 through 做爲子選項的選項)。

之前:npm

user.addProject(project, { status: 'started' })

如今:數組

user.addProject(project, { through: { status: 'started' }})
  • DATEONLY 如今以 YYYY-MM-DD 格式而不是 Date 類型返回字符串
  • Model.validate 實例方法默認運行驗證鉤子。之前你須要傳遞 { hooks: true }. 您能夠經過傳遞 { hooks: false } 來覆蓋此行爲。
  • 當驗證失敗時,來自 Model.validate 實例方法的結果將被拒絕。 驗證成功後才能實現。
  • 原始參數 where, order 和 group 好比 where: { $raw: '..', order: [{ raw: '..' }], group: [{ raw: '..' }] } 刪除以防止SQL注入攻擊。
  • Sequelize.Utils 再也不是公共API的一部分,使用它本身承擔風險。
  • Hooks 如今應返回 promise。 不支持回調。

新功能

  • sequelize.sync({ alter: true }) 的初始版本已添加,並使用 ALTER TABLE 命令來同步表。 遷移 仍然是首選,應在生產中使用。
  • 如今支持添加和刪除數據庫約束。 現有的 primary,foreignKey 和其餘約束如今可使用遷移來添加/刪除 - 查看更多.
  • 實例(數據庫行)如今是模型的實例,而不是單獨類的實例。這意味着你能夠替換User.build()new User()sequelize.define(attributes, options)promise

    class User extends Sequelize.Model {}
    User.init(attributes, options)

而後,您能夠直接在類中定義自定義方法,類方法和 getter / setter。
這也使得有更多的使用模式,例如用 裝飾器.

  • 增長了 DEBUG 支持。 如今可使用 DEBUG = sequelize * node app.js 爲全部 sequlize 操做啓用日誌記錄。 要過濾記錄的查詢,請使用 DEBUG=sequelize:sql:mssql sequelize:connection* 來記錄生成的SQL查詢,鏈接信息等。
  • SQLite 添加了 JSON 數據類型支持。
  • UPSERT 如今使用 MERGE 語句支持 MSSQL
  • 事務如今徹底支持 MSSQL
  • MSSQL 方言如今支持過濾的索引。

    queryInterface.addIndex(
      'Person',
      ['firstname', 'lastname'],
      {
        where: {
          lastname: {
            $ne: null
          }
        }
      }
    )

若是這篇文章對您有幫助, 感謝 下方點贊 或 Star GitHub: sequelize-docs-Zh-CN 支持, 謝謝.

相關文章
相關標籤/搜索