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

标签 mysql node.js orm sequelize.js

我正在使用 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/

相关文章:

mysql - 我们可以使用 sqoop 导出特殊字符吗?

c# - 如何获取一个表中出现的次数并将另一表更新为该值?

javascript:将全局对象重构为 require() 模块

node.js - Angular2 Formbuilder 显示提交的数据以进行编辑

java - 如何修复 org.hibernate.LazyInitializationException - 无法初始化代理 - 没有 session

python - 在 MySQL 的选择查询中传递其他变量时,使用 .format 的正确方法是什么?

sql - 请求错误: Validation failed for parameter- Invalid buffer

node.js - nodejs sequelize 包括关系排序

java - 使用 Hibernate 查询 "extension tables"

mysql - MySQL 的最大并发连接数