升級至 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 現在會回傳原生 Promise。感謝 Andy Edwards 完成此重構工作。
Sequelize.Promise
不再可用。sequelize.import
方法已移除。CLI 使用者應該更新至sequelize-cli@6
。- 當在 Model 和 Dialect 上用作屬性名稱時,QueryInterface 和 QueryGenerator 的所有實例都已重新命名為其 lowerCamelCase 變體,例如 queryInterface 和 queryGenerator,類別名稱保持不變。
Model
options.returning
選項 returning: true
將不再回傳未在模型中定義的屬性。舊的行為可以使用 returning: ['*']
來實現。
Model.changed()
Sequelize 不會偵測到深度變動。為了避免使用 save
時發生問題,您應該將每個屬性視為不可變,並且僅指派新值。
使用屬性深度變動的範例
const instance = await MyModel.findOne();
// Sequelize will not detect this change
instance.jsonField.jsonProperty = 12345;
console.log(instance.changed()); // false
// You can workaround this by telling Sequelize the property changed:
instance.changed('jsonField', true);
console.log(instance.changed()); // true
如果您將每個屬性視為不可變的範例
const instance = await MyModel.findOne();
// Sequelize will detect this change
instance.jsonField = {
...instance.jsonField,
jsonProperty: 12345,
};
console.log(instance.changed()); // true
Model.bulkCreate()
此方法現在會擲回 Sequelize.AggregateError
而非 Bluebird.AggregateError
。所有錯誤現在都會以 errors
索引鍵的形式公開。
Model.upsert()
現在所有方言都支援原生 upsert。
const [instance, created] = await MyModel.upsert({});
此方法的簽章已變更為 Promise<Model,boolean | null>
。第一個索引包含 upserted 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 將用作衝突目標。否則,第一個唯一約束將被選為衝突索引鍵。
QueryInterface
addConstraint
此方法現在僅採用 2 個參數,tableName
和 options
。先前,第二個參數可以是套用約束的欄位名稱列表,此列表現在必須以 options.fields
屬性的形式傳遞。
變更記錄
6.0.0-beta.7
- docs(關聯):屬於多個透過 through 表格建立
- docs(查詢介面):修正損壞的連結 #12272
- docs(sequelize):omitNull 僅適用於 CREATE/UPDATE 查詢
- docs:asyncify #12297
- docs:回應式 #12308
- docs:更新功能要求範本
- feat(postgres):原生 upsert #12301
- feat(sequelize):允許從 url 傳遞 dialectOptions.options #12404
- fix(include):檢查是否為包含的 through 模型指定屬性 #12316
- fix(model.destroy):使用截斷回傳 0 #12281
- fix(mssql):空白的 order 陣列會產生無效的 FETCH 陳述式 #12261
- fix(postgres):在描述表格時正確剖析列舉 #12409
- fix(query):確保 QueryTypes.RAW 的正確回傳簽章 #12305
- fix(query):為記錄器保留 cls 上下文 #12328
- fix(query-generator):如果 options.group 為空,則不要產生 GROUP BY 子句 #12343
- fix(reload):包含預設範圍 #12399
- fix(types):將 Association 新增至 OrderItem 類型 #12332
- fix(types):將 clientMinMessages 新增至 Options 介面 #12375
- fix(types):Options 中的 transactionType #12377
- fix(types):為 "where" 子句中的選用值新增支援 #12337
- fix(types):為 'FindOrCreateType' 新增遺失的欄位 #12338
- fix:將遺失的 sql 和 parameters 屬性新增至某些查詢錯誤 #12299
- fix:移除自訂檢查 #12262
- refactor:清除查詢產生器 #12304
6.0.0-beta.6
- docs(add-constraint):options.fields 支援
- docs(關聯):記載屬於多個的 uniqueKey #12166
- docs(關聯):options.through.where 支援
- docs(關聯):使用 and 而不是 'a nd' #12191
- docs(關聯):使用正確的範圍名稱 #12204
- docs(手冊):避免重複的標頭 ID #12201
- docs(模型):修正範例程式碼中的語法錯誤 #12137
- docs(查詢介面):removeIndex indexNameOrAttributes #11947
- docs(資源):新增 sequelize-guard 程式庫 #12235
- docs(typescript):修正令人困惑的註解 #12226
- docs(v6-guide):bluebird 移除 API 變更
- docs:資料庫版本支援資訊 #12168
- docs:移除剩餘的 bluebird 參考 #12167
- feat(屬於多個):允許建立偏執的聯結表格 #12088
- feat(屬於多個):取得/有/計數偏執聯結表格 #12256
- feat(pool):公開 maxUses 連線池組態選項 #12101
- feat(postgres):最小化超過限制的包含別名 #11940
- feat(sequelize):處理查詢字串主機值 #12041
- fix(關聯):確保所有產生的屬性都使用正確的結構描述 #12258
- fix(docs/實例):使用正確的變數進行遞增 #12087
- fix(include):個別查詢不是子查詢 #12144
- 修復(模型): 修復 bulkCreate 中關聯邏輯中未鏈式處理的 Promise #12163
- 修復(模型): updateOnDuplicate 處理複合鍵 #11984
- 修復(model.count): 沒有任何欄位的 distinct 會產生無效的 SQL #11946
- 修復(model.reload): 忽略 options.where 並始終使用 this.where() #12211
- 修復(mssql) 因為 BOOLEAN 欄位類型導致插入記錄失敗 #12090
- 修復(mssql): 在查詢生成器中轉換 sql_variant #11994
- 修復(mssql): 對於沒有返回的更新,不要使用 OUTPUT INSERTED #12260
- 修復(mssql): FETCH/NEXT 查詢中的重複排序 #12257
- 修復(mssql): 為浮點數設定正確的精確度 (scale) #11962
- 修復(mssql): tedious v9 需要 connect 呼叫 #12182
- 修復(mssql): 對於引擎表和欄位使用大寫 #12212
- 修復(pool): 當不支援引擎時顯示棄用警告 #12218
- 修復(postgres): addColumn 支援 ARRAY(ENUM) #12259
- 修復(query): 不要綁定在單詞內使用的 $ 符號 #12250
- 修復(query-generator): 處理基於子字串運算符的字面值 (literal) #12210
- 修復(query-interface): 允許為 query interface 插入傳遞 null 值 #11931
- 修復(query-interface): 允許在 IndexesOptions 的欄位中使用 sequelize.fn 和 sequelize.literal #12224
- 修復(scope): 不要修改原始 scope 定義 #12207
- 修復(sqlite): 多個主鍵導致語法錯誤 #12237
- 修復(sync): 將選項傳遞給所有查詢方法 #12208
- 修復(typings): 將 type_helpers 新增到檔案列表中 #12000
- 修復(typings): 更正 Model.init 返回類型 #12148
- 修復(typings): fn 可賦值給 where #12040
- 修復(typings): getForeignKeysForTables 參數定義 #12084
- 修復(typings): 使 between 運算符接受日期範圍 #12162
- 重構(ci): 改善資料庫等待腳本 #12132
- 重構(tsd-test-setup): 新增 & 設定 dtslint #11879
- 重構: 將所有方言條件邏輯移至子類別 #12217
- 重構: 移除 sequelize.import 輔助函式 #12175
- 重構: 使用原生版本 #12159
- 重構: 使用物件展開運算符代替 Object.assign #12213
6.0.0-beta.5
- 修復(find-all): 在 attributes 為空時拋出錯誤 #11867
- 修復(types):
queryInterface.addIndex
#11844 - 修復(types):
sequelize.query
中的plain
選項 #11596 - 修復(types): 更正重載方法順序 #11727
- 修復(types):
Sequelize.where
的comparator
參數 #11843 - 修復(types): 修復 BelongsToManyGetAssociationsMixinOptions #11818
- 修復(types): 將
hooks
新增到CreateOptions
#11736 - 修復(increment): 損壞的查詢 #11852
- 修復(associations): 在具有非主目標鍵的多對多關係上取得關聯 #11778
- 修復: 如果存在,正確選擇 SRID #11763
- 特性(sqlite): 為
options.storage
提供自動路徑 #11853 - 特性(postgres):
idle_in_transaction_session_timeout
連線選項 #11775 - 特性(index): 改善對具有運算符的多個欄位的支援 #11934
- 文件(transactions): 修復 addIndex 範例和文法 #11759
- 文件(raw-queries): 移除過時資訊 #11833
- 文件(optimistic-locking): 修復遺失的手冊 #11850
- 文件(model): findOne 針對空結果的返回值 #11762
- 文件(model-querying-basics.md): 新增一些逗號 #11891
- 文件(manuals): 修復遺失的 models-definition 頁面 #11838
- 文件(manuals): 大幅重寫 #11825
- 文件(dialect-specific): 新增 MSSQL 網域驗證範例 #11799
- 文件(associations): 修復 assocs 手冊中的錯字 #11888
- 文件(associations): 修復錯字 #11869
6.0.0-beta.4
- 特性(sync): 允許在啟用 alter 時同步時繞過 drop 語句 #11708
- 修復(model): 在包含的模型上注入 DependentVirtualAttrs #11713
- 修復(model): 正確生成 ON CONFLICT ... DO UPDATE #11666
- 修復(mssql): 優化 formatError RegEx #11725
- 修復(types): 新增 getForeignKeyReferencesForTable 類型 #11738
- 修復(types): 將 'restore' hooks 新增至類型 #11730
- 修復(types): 將 'fieldMaps' 新增至 QueryOptions 類型定義 #11702
- 修復(types): 將 isSoftDeleted 新增至 Model #11628
- 修復(types): 修復 upsert 類型定義 #11674
- 修復(types): 為欄位中的 getter 和 setter 指定 'this' #11648
- 修復(types): 將 paranoid 新增至 UpdateOptions 介面 #11647
- 修復(types): 在 IncludeThroughOptions 定義中包含 'as' #11624
- 修復(types): 將 Includeable 新增至 IncludeOptions.include 類型 #11622
- 修復(types): 交易鎖定 #11620
- 修復(sequelize.fn): 跳脫美元符號 (#11533) #11606
- 修復(types): 將 nested 新增至 Includeable #11354
- 修復(types): 將 date 新增至 where #11612
- 修復(types): 新增 getDatabaseName (#11431) #11614
- 修復(types): beforeDestroy #11618
- 修復(types): query-interface 表格結構描述 #11582
- 文件: README.md #11698
- 文件(sequelize): 詳細說明 options.retry 的用法 #11643
- 文件: 澄清 Sequelize 建構函式中的 logging 選項 #11653
- 文件(migrations): 修復範例中的語法錯誤 #11626
- 文件: 描述 logging 選項 #11654
- 文件(transaction): 修復錯字 #11659
- 文件(hooks): 新增有關多對多關係的資訊 #11601
- 文件(associations): 修復錯字 #11592
6.0.0-beta.3
- 特性: 支援 cls-hooked / 測試 #11584