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