問題タブ [umzug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Sequelize のモデルと移行定義の主な違いは何ですか?
SQL データベースの一部の Sequelize ユーザーはsync({ force: true })
、初期の頃によく使用し、その後移行に切り替えます。移行とモデルの構文は似ているように見えますが、あまり強調されていないように見える多くの違いもあるため、私は混乱しています。
いくつかの観察(間違っている可能性があります):
- 2 つのオプション オブジェクトは異なり
options.indexes
ます。モデルのオブジェクトは移行では機能しません (ただし、モデルでは機能します)。 - を使用したカスタム インデックス名
unique: 'somename'
は、移行フィールド属性では機能しません (ただし、モデルでは機能します)。しかし、unique: true
両方で動作します - 外部キーを明示的に作成する
references
必要があり、移行時に a を設定する必要があります (ただし、モデルでは、hasMany/belongsTo によって外部キー フィールドと外部キー参照が自動的に生成されます)。 id
、移行で手動で作成する必要がありますが、モデルでは作成しないでcreatedAt
くださいupdatedAt
最後の 2 つは、移行の責任 (db スキーマを設定する) とモデルを区別しているため、理にかなっていますが、移行がサポートするもの/機能する方法は、同様の項目では異なるようであり、sync
オプションは私の混乱を悪化させます。
いくつかの質問:
- Sequelizeの移行とモデルの間で覚えておくべき主な違いは何ですか(2 つの間の一般的な哲学ではありません)? モデルのどのオプション (オプションを使用する
sync
場合)が移行で機能しますか? sync
他の人は、個別の移行から移行に切り替えるときに、モデル ファイルを単に移行にコピーしますか? モデルでのみ機能する無関係な情報の一部を切り取りますか? 移行でのみ機能しますか?
sequelize.js - Sequelize 移行での Promise チェーン - リレーションが存在しません
この簡単なテスト コード:
次のエラーを返します。
これで、2 番目の promise (テーブルの変更に関する) が実行されるまでに、テーブルがまだ作成されていないことがわかりました。
移行内のすべてのクエリが一度に実行されるため、このテスト移行が発生した可能性があります。
そしてそれはうまくいきます。
では、テーブルの作成とPKの追加を1回の移行で実行できるように、最初のものが機能しない理由と、それをどのように実装できるかを説明できますか?
electron - 続編をインポートするときの循環依存関係
抽象クラスから拡張された一連のクラスがある電子プロジェクトがあります。抽象クラスには、sequelize インスタンスとモデルのインポートがあります (以下の再現コードには示されていません)。
コンパイルすると、私の電子アプリは正常に動作します。しかし、テストでは、jest はエラーを返し続けます
私が読んだことから、これは循環依存関係が原因です。コードについて何度もコメントしてきましたが、テストを通じてこの問題を防止/解決する方法を理解できません。
再現コードはこちらにあります: https://github.com/jjoey87/jest-circular-dependencies
インポートを再構築するより良い方法や、この作業を冗談の下で行うための実際の回避策はありますか? electron-webpack を介してコンパイルすると問題が発生しないのに、冗談でスローされる理由がわかりません。また、モジュール B の下にあるインポートされたコンポーネントにコメントを付けるかどうかも観察します。これにより、テストを実行/パスできます。
同様に、Abstract クラスからの Sequelize のインポートにコメントすると、テストに合格できます。