此係列文章的應用示例已發佈於 GitHub: sequelize-docs-Zh-CN. 能夠 Fork 幫助改進或 Star 關注更新. 歡迎 Star.html
Sequelize V4 是一個重要版本,它引入了新的功能和突破性的變化。 大量的 sequelize 代碼庫已用 ES2015 功能重構。 如下指南列出了從 v3 升級到 v4 的一些更改。查看 修改日誌 查看所有詳細列表。node
afterCreate
和 afterDelete
鉤子能夠實現相同的行爲。dialect:'mysql
而不是進一步的改變。REPEATABLE_READ
事務隔離。 隔離級別如今默認爲數據庫的級別。 在啓動事務時明確地傳遞所需的隔離級別。pool: false
的支持。要使用單個鏈接,請將 pool.max
設置爲1。刪除了對referencesKey的支持,使用了一個引用對象。mysql
references: { key: '', model: '' }
classMethods
和 instanceMethods
已被移除。之前: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.Instance
和 instance.Model
已被移除。要從一個實例訪問模型,只需使用 instance.constructor
。 示例類 (Model.Instance
) 如今是模型自己。Sequelize 如今使用一個 bluebird 庫的獨立副本.sql
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: { $raw: '..', order: [{ raw: '..' }], group: [{ raw: '..' }] }
刪除以防止SQL注入攻擊。Sequelize.Utils
再也不是公共API的一部分,使用它本身承擔風險。Hooks
如今應返回 promise。 不支持回調。sequelize.sync({ alter: true })
的初始版本已添加,並使用 ALTER TABLE
命令來同步表。 遷移 仍然是首選,應在生產中使用。實例(數據庫行)如今是模型的實例,而不是單獨類的實例。這意味着你能夠替換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 支持, 謝謝.