我正在使用 sequelize 在我的 Node 应用程序中对 mySql 数据库模式进行建模。我的模型的摘录如下所示: 我有一个公司表和一个部门表。一个公司可以有多个部门,一个部门只能属于一个公司。我将其建模如下:
公司表:
module.exports = function(sequelize, DataTypes){
return Company = sequelize.define('Company', {
companyId: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
name: {
type: DataTypes.STRING,
allowNull: false
}
})}
部门表:
var Company = require('./company');
module.exports = function(sequelize,DataTypes) {
return Department = sequelize.define('Department', {
departmentId: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
companyId: {
type: DataTypes.INTEGER,
references: 'Companies',
referencesKey: 'companyId',
onDelete: 'cascade'
}
});}
为了将此架构实际存储在数据库中,我使用了以下代码:
var db = require('../models/index');
db["Company"].hasMany(db["Department"], {as: 'departments'});
db["Department"].belongsTo(db["Company"], {foreignKey: 'companyId', foreignKeyConstraint: true});
models.sequelize.sync().complete(function(err){
//irrelevant for the problem
});
问题是这段代码在 department 表中创建了 2 个外键。一个在字段“companyId”上(如预期的那样),还有一个在字段“CompanyCompanyId”上,这是一个自动生成的字段。
如何确保只使用和创建我定义的外键('companyId')?
最佳答案
我设法解决了这个问题:
与其只在 belongsTo 语句中使用“foreignKey”选项,还应该在“hasMany”语句中使用它。
原始问题中发布的两个模型保持不变。我唯一需要更改的是 foreignKey 选项的位置:
var db = require('../models/index');
db["Company"].hasMany(db["Department"], {as: 'departments'});
db["Department"].belongsTo(db["Company"], {foreignKey: 'companyId', foreignKeyConstraint: true});
改为:
var db = require('../models/index');
db["Company"].hasMany(db["Department"], { foreignKey: 'companyId'});
db["Department"].belongsTo(db["Company"], {foreignKey: 'companyId'});
关于mysql - 如何使用 Sequelize 和 mySql 选择外键列的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28056211/