加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何使用Sequelize和mySql选择外键列的名称?

发布时间:2020-12-11 23:43:49 所属栏目:MySql教程 来源:网络整理
导读:我正在使用sequelize在我的node-application中建模mySql数据库模式.我的模型的摘录如下所示: 我有一个公司表和一个部门表.公司可以有多个部门,一个部门只属于一个公司.我将其建模如下: 公司表: module.exports = function(sequelize,DataTypes){return Co

我正在使用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’)?

最佳答案 我设法解决了这个问题:

它不应仅在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'});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读