本文へスキップ
バージョン: v6 - 安定版

v6へのアップグレード

Sequelize v6はv5に続くメジャーリリースです。アップグレードに役立つ破壊的変更のリストを以下に示します。

破壊的変更

Node 10以降のサポート

Sequelize v6はNode 10以降のみサポートします #10821

CLS

CLSのサポートには、cls-hookedパッケージを使用する必要があります。

const cls = require('cls-hooked');
const namespace = cls.createNamespace('....');
const Sequelize = require('sequelize');

Sequelize.useCLS(namespace);

データベースエンジンのサポート

最小サポート対象のデータベースエンジンバージョンを更新しました。古いデータベースエンジンを使用すると、`SEQUELIZE0006`の非推奨警告が表示されます。バージョン表については、リリースページを確認してください。

Sequelize

  • Bluebirdが削除されました。内部的には、すべてメソッドがasync/awaitを使用するようになりました。パブリックAPIはネイティブプロミスを返すようになりました。このリファクタリング作業はAndy Edwardsによるものです。
  • `Sequelize.Promise`は使用できなくなりました。
  • `sequelize.import`メソッドは削除されました。CLIユーザーは`sequelize-cli@6`に更新する必要があります。
  • QueryInterfaceとQueryGeneratorのすべてのインスタンスは、ModelとDialectのプロパティ名として使用する場合、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()`

このメソッドは、`Bluebird.AggregateError`ではなく`Sequelize.AggregateError`をスローするようになりました。すべてのエラーは`errors`キーとして公開されるようになりました。

`Model.upsert()`

ネイティブupsertがすべてのDialectでサポートされるようになりました。

const [instance, created] = await MyModel.upsert({});

このメソッドのシグネチャは`Promise`に変更されました。最初のインデックスには更新された`instance`、2番目のインデックスにはレコードが作成されたか更新されたかを示すブール値(または`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`

このメソッドは、`tableName`と`options`の2つのパラメーターのみを受け取るようになりました。以前は2番目のパラメーターに制約を適用する列名のリストを指定できましたが、このリストは`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): 別々のクエリがサブクエリにならないように修正 #12144
  • fix(model): bulkCreateにおける関連付けロジックの非同期処理(Promise)の修正 #12163
  • fix(model): updateOnDuplicateが複合キーに対応するように修正 #11984
  • fix(model.count): カラムを指定しないdistinctで無効なSQLが生成される問題を修正 #11946
  • fix(model.reload): options.whereを無視し、常にthis.where()を使用するように修正 #12211
  • fix(mssql): BOOLEANカラムタイプのためレコード挿入に失敗する問題を修正 #12090
  • fix(mssql): クエリジェネレータでsql_variantをキャストするように修正 #11994
  • fix(mssql): 戻り値なしのUPDATEでOUTPUT INSERTEDを使用しないように修正 #12260
  • fix(mssql): FETCH/NEXTクエリにおける重複したORDER句を修正 #12257
  • fix(mssql): floatのスケールを正しく設定するように修正 #11962
  • fix(mssql): tedious v9はconnect呼び出しを必要とする #12182
  • fix(mssql): エンジンテーブルとカラムの大文字化を使用するように修正 #12212
  • fix(pool): エンジンがサポートされていない場合、非推奨表示を行うように修正 #12218
  • fix(postgres): addColumnがARRAY(ENUM)をサポートするように修正 #12259
  • fix(query): 単語全体の中で使用されている$をバインドしないように修正 #12250
  • fix(query-generator): 部分文字列ベースの演算子に対するリテラルを処理するように修正 #12210
  • fix(query-interface): クエリインターフェース挿入に対してnullを渡せるように修正 #11931
  • fix(query-interface): IndexesOptionsのfieldsにsequelize.fnとsequelize.literalを許可するように修正 #12224
  • fix(scope): 元のスコープ定義を変更しないように修正 #12207
  • fix(sqlite): 複数の主キーが構文エラーになる問題を修正 #12237
  • fix(sync): すべてのクエリメソッドにオプションを渡せるように修正 #12208
  • fix(typings): ファイルリストにtype_helpersを追加 #12000
  • fix(typings): Model.initの戻り値の型を修正 #12148
  • fix(typings): fnがwhereに代入可能になるように修正 #12040
  • fix(typings): getForeignKeysForTablesの引数の定義を修正 #12084
  • fix(typings): between演算子が日付範囲を受け入れるように修正 #12162
  • refactor(ci): データベース待ちスクリプトを改善 #12132
  • refactor(tsd-test-setup): dtslintを追加&設定 #11879
  • refactor: すべてのDialect条件付きロジックをサブクラスに移動 #12217
  • refactor: sequelize.importヘルパーを削除 #12175
  • refactor: ネイティブバージョンを使用するように修正 #12159
  • refactor: Object.assignの代わりにオブジェクトスプレッドを使用するように修正 #12213

6.0.0-beta.5

  • fix(find-all): 属性が空の場合にエラーをスローするように修正 #11867
  • fix(types): queryInterface.addIndex #11844
  • fix(types): sequelize.queryplainオプション #11596
  • fix(types): オーバーロードされたメソッドの順序を修正 #11727
  • fix(types): Sequelize.wherecomparator引数 #11843
  • fix(types): BelongsToManyGetAssociationsMixinOptionsを修正 #11818
  • fix(types): CreateOptionshooksを追加 #11736
  • fix(increment): クエリの問題を修正 #11852
  • fix(associations): 非主キーのターゲットキーを持つ多対多の取得 #11778
  • fix: SRIDが存在する場合に正しく選択するように修正 #11763
  • feat(sqlite): options.storageに対する自動パスプロビジョン #11853
  • feat(postgres): idle_in_transaction_session_timeout接続オプション #11775
  • feat(index): 演算子を持つ複数のフィールドをサポートするように改善 #11934
  • docs(transactions): addIndexの例と文法を修正 #11759
  • docs(raw-queries): 古い情報を削除 #11833
  • docs(optimistic-locking): 欠落していたマニュアルを修正 #11850
  • docs(model): 空の結果に対するfindOneの戻り値 #11762
  • docs(model-querying-basics.md): カンマを追加 #11891
  • docs(manuals): 欠落していたmodels-definitionページを修正 #11838
  • docs(manuals): 大幅な書き直し #11825
  • docs(dialect-specific): MSSQLドメイン認証の例を追加 #11799
  • docs(associations): 関連付けマニュアルのタイプミスを修正 #11888
  • docs(associations): タイプミスを修正 #11869

6.0.0-beta.4

  • feat(sync): alterを有効にして同期する場合、drop文をバイパスできるようにする #11708
  • fix(model): インクルードされたモデルでinjectDependentVirtualAttrsを実行 #11713
  • fix(model): ON CONFLICT ... DO UPDATEを正しく生成 #11666
  • fix(mssql): formatError RegExを最適化 #11725
  • fix(types): getForeignKeyReferencesForTable型を追加 #11738
  • fix(types): 'restore'フックを型に追加 #11730
  • fix(types): QueryOptions型に'fieldMaps'を追加 #11702
  • fix(types): ModelにisSoftDeletedを追加 #11628
  • fix(types): upsertの型付けを修正 #11674
  • fix(types): フィールドのgetterとsetterで'this'を指定 #11648
  • fix(types): UpdateOptionsインターフェースにparanoidを追加 #11647
  • fix(types): IncludeThroughOptions定義に'as'を含める #11624
  • fix(types): IncludeOptions.include型にIncludeableを追加 #11622
  • fix(types): トランザクションロック #11620
  • fix(sequelize.fn): ドル記号のエスケープ (#11533) #11606
  • fix(types): Includeableにnestedを追加 #11354
  • fix(types): whereにdateを追加 #11612
  • fix(types): getDatabaseNameを追加 (#11431) #11614
  • fix(types): beforeDestroy #11618
  • fix(types): query-interfaceテーブルスキーマ #11582
  • docs: README.md #11698
  • docs(sequelize): options.retryの使用法の詳細 #11643
  • docs: Sequelizeコンストラクタのloggingオプションを明確化 #11653
  • docs(migrations): 例の構文エラーを修正 #11626
  • docs: loggingオプションの説明 #11654
  • docs(transaction): タイプミスを修正 #11659
  • docs(hooks): belongs-to-manyに関する情報を追加 #11601
  • docs(associations): タイプミスを修正 #11592

6.0.0-beta.3

  • feat: cls-hooked / テストのサポート #11584

6.0.0-beta.2

  • feat(postgres): returningオプションを変更してモデル属性のみを返す #11526
  • fix(associations): belongs-to-manyにバイナリキーを許可 #11578
  • fix(postgres): upsertQueryのreturningステートメントを常に置き換える
  • fix(model): .changed()をディープアウェアにする #10851
  • change: Node 10を使用 #11580