跳至主要內容
版本: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 現在會回傳原生 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 個參數,tableNameoptions。先前,第二個參數可以是套用約束的欄位名稱列表,此列表現在必須以 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.wherecomparator 參數 #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

6.0.0-beta.2

  • feat(postgres): 變更 returning 選項為僅回傳模型屬性 #11526
  • fix(關聯): 允許 belongs-to-many 關聯使用二進制鍵值 #11578
  • fix(postgres): 針對 upsertQuery 總是替換 returning 語句
  • fix(model): 使 .changed() 能夠深層感知變更 #10851
  • change: 使用 node 10 #11580