>웹 프론트엔드 >JS 튜토리얼 >Sequelize가 모델 연관에서 내 외래 키 열을 생성하지 않는 이유는 무엇입니까?

Sequelize가 모델 연관에서 내 외래 키 열을 생성하지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 15:16:11628검색

Why Doesn't Sequelize Create My Foreign Key Column in Model Associations?

외래 키 열을 생성하지 않는 Sequelize 모델 연관

Sequelize에서 연관은 둘 이상의 모델 간의 관계를 정의합니다. 관련 데이터에 액세스하고 복잡한 쿼리를 수행하는 편리한 방법을 제공합니다. 그러나 일부 사용자는 Sequelize가 특정 모델에 대한 외래 키 열을 생성하지 않는 문제에 직면합니다. 이 문제는 다른 모델에 대한 동일한 연관 정의에도 불구하고 발생합니다.

외래 키 생성 이해

Sequelize는 두 모델 간에 연관이 설정되면 자동으로 외래 키 열을 생성합니다. 이는 연결 옵션에 foreignKey 속성이 지정된 경우에 발생합니다. 예를 들어, 제공된 User 모델에서 ownTo 연관은 role_id의 foreignKey로 정의됩니다. 일반적으로 이로 인해 User 테이블에 role_id 열이 생성됩니다.

문제 해결

이 문제에 대한 해결책은 모든 모델이 하나의 중앙 위치에 등록 및 연결됩니다. 모델 등록 및 연결을 중앙 집중화함으로써 Sequelize는 종속성을 올바르게 처리하고 필요한 외래 키 열을 생성할 수 있습니다.

중앙 집중식 모델 등록 및 연결 구현

다음 코드는 다음 코드를 보여줍니다. 단일 파일에 모델 등록 및 연결:

// database.js

// Register all models in one place
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const db = {};

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

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

// Register models and add them to the db object
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;
  });

// Associate models within the db object
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;

사용법 예

코드베이스의 다른 모듈에서는 중앙 집중식 데이터베이스 연결에 액세스하고 다음과 같이 등록된 모델을 사용할 수 있습니다.

const db = require('../database');
const { Op } = require('sequelize');

// Use models defined in database.js
const users = await db.user.findAll({
  where: {
    [Op.or]: [
      {
        first_name: 'Smith'
      },
      {
        last_name: 'Smith'
      }
    ]
  }
});

이 지침을 따르면 다음을 보장할 수 있습니다. 모든 Sequelize 모델이 올바르게 연결되어 있고 적절한 외래 키 열이 생성되었는지 확인하세요.

위 내용은 Sequelize가 모델 연관에서 내 외래 키 열을 생성하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.