Sequelize 模型關聯未建立外鍵列
在 Sequelize 中,關聯定義兩個或多個模型之間的關係。它提供了一種存取相關資料和執行複雜查詢的便捷方法。但是,某些使用者遇到 Sequelize 不會為特定模型建立外鍵列的問題。儘管其他模型具有相同的關聯定義,但還是會出現此問題。
了解外鍵建立
當兩個模型之間建立關聯時,Sequelize 會自動建立外鍵列。當在關聯選項中指定foreignKey 屬性時,會發生這種情況。例如,在提供的 User 模型中,belongsTo 關聯是使用 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中文網其他相關文章!