Sequelize 通常在使用 ownTo() 关联时为外键创建一个新列。但是,在某些情况下,它可能不会这样做。
提供的 User 模型中描述了一个这样的场景,其中 Sequelize 无法创建 role_id 列。这会引起担忧和困惑,特别是当同一项目中的其他模型表现出预期行为时。
解决方案在于集中注册所有模型及其关联一个地方。这确保 Sequelize 可以在模型之间建立正确的关系。
// 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;
// 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中文网其他相关文章!