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中文網其他相關文章!