我正在使用sequelize在我的node-application中建模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,unique: true
},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’)?
最佳答案
我设法解决了这个问题:
原文链接:https://www.f2er.com/mysql/434119.html它不应仅在belongsTo语句中使用“foreignKey”选项,而应在“hasMany”语句中使用.
在原始问题中发布的两个模型保持不变.我唯一需要改变的是foreignKey选项的位置:
var db = require('../models/index');
db["Company"].hasMany(db["Department"],foreignKeyConstraint: true});
变成:
var db = require('../models/index');
db["Company"].hasMany(db["Department"],{ foreignKey: 'companyId'});
db["Department"].belongsTo(db["Company"],{foreignKey: 'companyId'});