>웹 프론트엔드 >JS 튜토리얼 >Sequelize가 때때로 관련 모델 열 생성에 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Sequelize가 때때로 관련 모델 열 생성에 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 21:13:16478검색

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

Sequelize 모델 연관 열 생성 불일치

Sequelize에서 모델 연관은 서로 다른 모델 간의 관계를 설정합니다. 그러나 사용자는 Sequelize가 특정 모델에 대해 예상되는 외래 키 열을 생성하지 못하지만 다른 모델에 대해서는 성공하는 불일치를 보고했습니다. 이 문서에서는 가능한 원인을 조사하고 이 문제를 해결하기 위한 솔루션을 제공합니다.

원래 질문은 Sequelize가 역할 모델과 사용자 모델의 연결에 대한 role_id 열을 생성하지 않은 모델에서 발생했습니다. 다양한 문제 해결 방법을 시도했지만 문제가 지속되었습니다.

해결책은 모든 모델과 해당 연결을 하나의 중앙 위치에 등록하는 것입니다. 이렇게 하면 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 속성으로 등록합니다. object.
  • 관계를 설정하기 위해 연관이 있는 각 모델에 대해 연관 함수가 호출됩니다.

모델 액세스

모델 등록을 중앙 집중화하면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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