Upgrade to v6 - 升级到 V6
Sequelize v6 是 v5 之后的下一个主要版本. 以下列出了一些重大更改以帮助你进行升级.
重大变化
支持 Node 10 以及更高
Sequelize v6 将支持 Node 10 及更高版本 #10821.
CLS
你现在应该使用 cls-hooked 软件包来支持 CLS.
const cls = require('cls-hooked');
const namespace = cls.createNamespace('....');
const Sequelize = require('sequelize');
Sequelize.useCLS(namespace);
数据库引擎支持
我们已经更新了最低支持的数据库引擎版本. 使用较旧的数据库引擎将显示 SEQUELIZE0006
弃用警告。
Sequelize
- Bluebird 已被移除. 内部所有方法现在都使用 async/await. 公共 API 现在返回原生 promises. 感谢 Andy Edwards 的重构工作.
Sequelize.Promise
不再被提供.sequelize.import
方法已被删除. CLI 用户应更新到sequelize-cli@6
.- QueryInterface 和 QueryGenerator 的所有实例都已重命名为它们的小写驼峰别名形式,例如: queryInterface 和 queryGenerator 用作 ‘模型’ 和 ‘方言’ 上的属性名称时,类名称保持不变.
模型
options.returning
参数 returning: true
将不再返回模型中未定义的属性. 之前旧的行为可以通过使用 returning: ['*']
来实现.
Model.changed()
现在,此方法使用 _.isEqual
进行相等性测试,并且现在可以识别 JSON 对象. 修改 JSON 对象的嵌套值不会将其标记为已更改(因为它仍然是同一对象).
const instance = await MyModel.findOne();
instance.myJsonField.someProperty = 12345; // 更改为 12345
console.log(instance.changed()); // false
await instance.save(); // 这不会保存任何东西
instance.changed("myJsonField", true);
console.log(instance.changed()); // ['myJsonField']
await instance.save(); // 将会保存
Model.bulkCreate()
这个方法现在抛出 Sequelize.AggregateError
而不是 Bluebird.AggregateError
. 现在, 所有错误都显示为 errors
标识.
Model.upsert()
现在所有语言都支持原生 upsert.
const [instance, created] = await MyModel.upsert({});
此方法的签名已更改为 Promise<Model,boolean | null>
. 第一个索引包含被 upsert 的 instance
, 第二个索引包含一个布尔值(或null
), 指示记录是创建还是更新。 对于SQLite/Postgres,created
值将始终为 null
。
- MySQL - 使用 ON DUPLICATE KEY UPDATE 实现
- PostgreSQL - 使用 ON CONFLICT DO UPDATE 实现
- SQLite - 使用 ON CONFLICT DO UPDATE 实现
- MSSQL - 使用 MERGE 语句实现
Postgres 用户需要注意: 如果 upsert 有效负载包含 PK 字段, 则 PK 将用作冲突目标. 否则, 将选择第一个唯一约束作为冲突键.
查询接口
addConstraint
现在, 此方法仅使用2个参数, 即 tableName
和 options
. 以前, 第二个参数是要应用约束的列名列表,此列表现在必须作为 options.fields
属性传递.
变更日志
6.0.0-beta.7
- docs(associations): belongs to many create with through table
- docs(query-interface): fix broken links #12272
- docs(sequelize): omitNull only works for CREATE/UPDATE queries
- docs: asyncify #12297
- docs: responsive #12308
- docs: update feature request template
- feat(postgres): native upsert #12301
- feat(sequelize): allow passing dialectOptions.options from url #12404
- fix(include): check if attributes specified for included through model #12316
- fix(model.destroy): return 0 with truncate #12281
- fix(mssql): empty order array generates invalid FETCH statement #12261
- fix(postgres): parse enums correctly when describing a table #12409
- fix(query): ensure correct return signature for QueryTypes.RAW #12305
- fix(query): preserve cls context for logger #12328
- fix(query-generator): do not generate GROUP BY clause if options.group is empty #12343
- fix(reload): include default scope #12399
- fix(types): add Association into OrderItem type #12332
- fix(types): add clientMinMessages to Options interface #12375
- fix(types): transactionType in Options #12377
- fix(types): add support for optional values in “where” clauses #12337
- fix(types): add missing fields to ‘FindOrCreateType’ #12338
- fix: add missing sql and parameters properties to some query errors #12299
- fix: remove custom inspect #12262
- refactor: cleanup query generators #12304
6.0.0-beta.6
- docs(add-constraint): options.fields support
- docs(association): document uniqueKey for belongs to many #12166
- docs(association): options.through.where support
- docs(association): use and instead of ‘a nd’ #12191
- docs(association): use correct scope name #12204
- docs(manuals): avoid duplicate header ids #12201
- docs(model): correct syntax error in example code #12137
- docs(query-interface): removeIndex indexNameOrAttributes #11947
- docs(resources): add sequelize-guard library #12235
- docs(typescript): fix confusing comments #12226
- docs(v6-guide): bluebird removal API changes
- docs: database version support info #12168
- docs: remove remaining bluebird references #12167
- feat(belongs-to-many): allow creation of paranoid join tables #12088
- feat(belongs-to-many): get/has/count for paranoid join table #12256
- feat(pool): expose maxUses pool config option #12101
- feat(postgres): minify include aliases over limit #11940
- feat(sequelize): handle query string host value #12041
- fix(associations): ensure correct schema on all generated attributes #12258
- fix(docs/instances): use correct variable for increment #12087
- fix(include): separate queries are not sub-queries #12144
- fix(model): fix unchained promise in association logic in bulkCreate #12163
- fix(model): updateOnDuplicate handles composite keys #11984
- fix(model.count): distinct without any column generates invalid SQL #11946
- fix(model.reload): ignore options.where and always use this.where() #12211
- fix(mssql) insert record failure because of BOOLEAN column type #12090
- fix(mssql): cast sql_variant in query generator #11994
- fix(mssql): dont use OUTPUT INSERTED for update without returning #12260
- fix(mssql): duplicate order in FETCH/NEXT queries #12257
- fix(mssql): set correct scale for float #11962
- fix(mssql): tedious v9 requires connect call #12182
- fix(mssql): use uppercase for engine table and columns #12212
- fix(pool): show deprecation when engine is not supported #12218
- fix(postgres): addColumn support ARRAY(ENUM) #12259
- fix(query): do not bind $ used within a whole-word #12250
- fix(query-generator): handle literal for substring based operators #12210
- fix(query-interface): allow passing null for query interface insert #11931
- fix(query-interface): allow sequelize.fn and sequelize.literal in fields of IndexesOptions #12224
- fix(scope): don’t modify original scope definition #12207
- fix(sqlite): multiple primary keys results in syntax error #12237
- fix(sync): pass options to all query methods #12208
- fix(typings): add type_helpers to file list #12000
- fix(typings): correct Model.init return type #12148
- fix(typings): fn is assignable to where #12040
- fix(typings): getForeignKeysForTables argument definition #12084
- fix(typings): make between operator accept date ranges #12162
- refactor(ci): improve database wait script #12132
- refactor(tsd-test-setup): add & setup dtslint #11879
- refactor: move all dialect conditional logic into subclass #12217
- refactor: remove sequelize.import helper #12175
- refactor: use native versions #12159
- refactor: use object spread instead of Object.assign #12213
6.0.0-beta.5
- fix(find-all): throw on empty attributes #11867
- fix(types):
queryInterface.addIndex
#11844 - fix(types):
plain
option insequelize.query
#11596 - fix(types): correct overloaded method order #11727
- fix(types):
comparator
arg ofSequelize.where
#11843 - fix(types): fix BelongsToManyGetAssociationsMixinOptions #11818
- fix(types): adds
hooks
toCreateOptions
#11736 - fix(increment): broken queries #11852
- fix(associations): gets on many-to-many with non-primary target key #11778
- fix: properly select SRID if present #11763
- feat(sqlite): automatic path provision for
options.storage
#11853 - feat(postgres):
idle_in_transaction_session_timeout
connection option #11775 - feat(index): improve to support multiple fields with operator #11934
- docs(transactions): fix addIndex example and grammar #11759
- docs(raw-queries): remove outdated info #11833
- docs(optimistic-locking): fix missing manual #11850
- docs(model): findOne return value for empty result #11762
- docs(model-querying-basics.md): add some commas #11891
- docs(manuals): fix missing models-definition page #11838
- docs(manuals): extensive rewrite #11825
- docs(dialect-specific): add MSSQL domain auth example #11799
- docs(associations): fix typos in assocs manual #11888
- docs(associations): fix typo #11869
6.0.0-beta.4
- feat(sync): allow to bypass drop statements when sync with alter enabled #11708
- fix(model): injectDependentVirtualAttrs on included models #11713
- fix(model): generate ON CONFLICT … DO UPDATE correctly #11666
- fix(mssql): optimize formatError RegEx #11725
- fix(types): add getForeignKeyReferencesForTable type #11738
- fix(types): add ‘restore’ hooks to types #11730
- fix(types): added ‘fieldMaps’ to QueryOptions typings #11702
- fix(types): add isSoftDeleted to Model #11628
- fix(types): fix upsert typing #11674
- fix(types): specified ‘this’ for getters and setters in fields #11648
- fix(types): add paranoid to UpdateOptions interface #11647
- fix(types): include ‘as’ in IncludeThroughOptions definition #11624
- fix(types): add Includeable to IncludeOptions.include type #11622
- fix(types): transaction lock #11620
- fix(sequelize.fn): escape dollarsign (#11533) #11606
- fix(types): add nested to Includeable #11354
- fix(types): add date to where #11612
- fix(types): add getDatabaseName (#11431) #11614
- fix(types): beforeDestroy #11618
- fix(types): query-interface table schema #11582
- docs: README.md #11698
- docs(sequelize): detail options.retry usage #11643
- docs: clarify logging option in Sequelize constructor #11653
- docs(migrations): fix syntax error in example #11626
- docs: describe logging option #11654
- docs(transaction): fix typo #11659
- docs(hooks): add info about belongs-to-many #11601
- docs(associations): fix typo #11592
6.0.0-beta.3
- feat: support cls-hooked / tests #11584