ホームページ > ウェブフロントエンド > jsチュートリアル > Sequelize が常に外部キー列を作成しないのはなぜですか?これを修正するにはどうすればよいですか?

Sequelize が常に外部キー列を作成しないのはなぜですか?これを修正するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-09 08:48:07
オリジナル
506 人が閲覧しました

Why Doesn't Sequelize Always Create Foreign Key Columns, and How Can I Fix This?

Sequelize が特定のモデルの外部キー列を作成しないのはなぜですか?

Sequelize は通常、belongsTo() 関連付けを使用するときに外部キーの新しい列を作成します。ただし、シナリオによっては、そうならない場合があります。

問題の理解

そのようなシナリオの 1 つが、提供された User モデルに示されており、Sequelize が role_id 列の作成に失敗します。これは、特に同じプロジェクト内の他のモデルが予期した動作を示す場合に、懸念と混乱を引き起こします。

解決策: モデルの登録の一元化

解決策は、すべてのモデルとその関連付けの登録を一元化することにあります。 1か所。これにより、Sequelize がモデル間の適切な関係を確立できるようになります。

実装

  1. モデルの登録を処理するために、単一のファイル、database.js を作成します。
  2. すべてインポートmodels ディレクトリ内のモデル ファイル。
  3. 各モデルに対して assign() 関数を呼び出して、モデル間の関係を定義します。
// database.js
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const db = {};

const sequelize = new Sequelize(/* your connection settings here */);
const models = path.join(__dirname, 'models');

fs.readdirSync(models).filter(file => file.indexOf('.') !== 0 && file !== 'basename' && file.slice(-3) === '.js').forEach(file => {
  const model = sequelize['import'](path.join(models, file));
  db[model.name] = model;
});

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

db.Sequelize = Sequelize;
db.sequelize = sequelize;

module.exports = db;
ログイン後にコピー
  1. 他のモジュールでは、db オブジェクトをインポートし、それを通じてモデルと関連付けにアクセスします。
// some_module.js
const db = require('../database');

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

次の手順に従って、すべてのモデルが正しく登録され、それらの関連付けが適切に確立されていることを確認でき、Sequelize が外部キーに必要な列を作成できるようになります。

以上がSequelize が常に外部キー列を作成しないのはなぜですか?これを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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