此系列文章的应用示例已发布于 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 支持, 谢谢.