我正在学习 node js
和 sequelize
并且在场景中感到困惑。
首先看看我定义的模型。
class Car extends Sequelize.Model {
static init(sequelize, DataTypes) {
return super.init({
id: {
allowNull: false,
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name:{
type: DataTypes.STRING(20),
defaultValue:''
},
//CASE 1 == can define custom foreign column like this
company_id: {
type: Sequelize.INTEGER,
references: {
model: 'Company',
key: 'id',
},
allowNull: false,
},
},
{
sequelize,
tableName: 'Car'
}
);
}
//CASE 2 == can define association like this
static associate(models) {
this.myAssociation = this.belongsTo(models.Company);
}
}
当我遵循案例 1 时,这会在
car
表中添加为一列,当我运行案例 2 时,会在表中自动添加一列 ComapanyId
。但是,如果我同时运行案例 1 和案例 2,则会创建两列。一个是自定义的,一个是自定义的由协会创建。但我很困惑,这是在两个表之间添加外键约束的正确方法。请让我的概念清楚。谢谢。
最佳答案
您可以在关联定义中指明哪个字段将用作外键:
this.myAssociation = this.belongsTo(models.Company, { foreignKey: 'company_id' });
如果您不使用 sync 方法为模型自动创建表,则 CASE 1 用于迁移,指示外键的另一侧,CASE 2 将在您创建/读取/更新时使用关联模型/通过 Sequelize 模型删除数据库中的记录。
关于javascript - 在 sequelize node.js 中添加关联与添加自定义外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61025356/