외래 키 열을 생성하지 않는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!