ホームページ > ウェブフロントエンド > jsチュートリアル > Sequelize が関連付けられたモデル列の作成に失敗する場合があるのはなぜですか?それを修正するにはどうすればよいですか?

Sequelize が関連付けられたモデル列の作成に失敗する場合があるのはなぜですか?それを修正するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-02 21:13:16
オリジナル
463 人が閲覧しました

Why Does Sequelize Sometimes Fail to Create Associated Model Columns, and How Can I Fix It?

Sequelize モデルの関連付け列作成の不一致

Sequelize では、モデルの関連付けにより、異なるモデル間の関係が確立されます。ただし、ユーザーは、Sequelize が特定のモデルでは予期された外部キー列の作成に失敗するが、他のモデルでは成功するという不一致を報告しています。この記事では、考えられる理由を詳しく調べ、この問題を解決するための解決策を提供します。

元の質問は、Sequelize が User モデルとロール モデルの関連付けのための role_id 列を作成しなかったモデルから生じました。さまざまなトラブルシューティング方法を試したにもかかわらず、問題は解決しませんでした。

解決策は、すべてのモデルとその関連付けが 1 つの中央の場所に登録されていることを確認することです。これにより、Sequelize がすべてのモデルの関係を完全に把握し、データベースとの同期中に必要な列を作成できるようになります。

集中モデル登録

推奨されるアプローチは、database.js ファイルを作成し、そのファイル内にすべてのモデルを登録することです。以下は、database.js ファイルの例です。

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const db = {};

const models = path.join(__dirname, 'models');

const sequelize = new Sequelize(/* your connection settings here */);

fs
  .readdirSync(models)
  .filter(function (file) {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(function (file) {
    // Sequelize version <= 5.x
    var model = sequelize['import'](path.join(models, file));
    // Sequelize version >= 6.x
    // var model = require(path.join(models, file))(
    //   sequelize,
    //   Sequelize.DataTypes
    // );
    db[model.name] = model;
  });

Object.keys(db).forEach(function (modelName) {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.Sequelize = Sequelize; // for accessing static props and functions like Op.or
db.sequelize = sequelize; // for accessing connection props and functions like 'query' or 'transaction'

module.exports = db;
ログイン後にコピー

このファイル内:

  • models は、モデル ファイルが配置されているディレクトリです。
  • sequelize必要な接続設定で初期化されます。
  • モデルはインポートされ、それぞれの名前でプロパティとして登録されます。 db オブジェクト。
  • 関係を確立するために、関連付けを持つモデルごとに関連付け関数が呼び出されます。

モデルへのアクセス

モデルの登録が一元化されている場合は、database.js からエクスポートされた db オブジェクトを使用して、他のモジュールからモデルにアクセスできます。ユーザー モデルの使用例を次に示します。

const db = require('../database');
...
const users = await db.user
   .findAll({
     where: {
      [db.Sequelize.Op.or]: [{
        first_name: 'Smith'
      }, {
        last_name: 'Smith'
      }]
     }
})
ログイン後にコピー

モデルの登録を一元化し、関連付けが適切に定義されていることを確認することで、一貫性のない列作成の問題を解決し、クリーンで一貫性のあるモデル インフラストラクチャを維持できます。

以上がSequelize が関連付けられたモデル列の作成に失敗する場合があるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート