Sequelize.js 为什么在这种情况下会生成foreignKey?

Sequelize.js 为什么在这种情况下会生成foreignKey?,sequelize.js,Sequelize.js,如果在模型中使用belongsTo和hasMany,则通过CamelCase生成belongsTo的foreignkey User.belongsTo(Group) -> foreignKey will be 'groupId' User.hasMany(Device) User.findAll({ attributes: ['id'], include: [Group, Device] }); 如果不使用User.hasMany(设备)用户外键。belongsTo

如果在模型中使用belongsTo和hasMany,则通过CamelCase生成belongsTo的foreignkey

User.belongsTo(Group) -> foreignKey will be 'groupId'   
User.hasMany(Device)  

User.findAll({
  attributes: ['id'],
  include: [Group, Device] 
});
如果不使用User.hasMany(设备)用户外键。belongsTo(组)将为“组id”

User.belongsTo(Group) -> foreignKey will be 'group_id' 

User.findAll({
  attributes: ['id'],
  include: [Group] 
});


为什么会发生这种情况?我如何解决它?

不同的同事处理列名生成的方式略有不同,但在使用不同的方法时,应该使用相同的列名格式。模型选项也会影响关联名称,因为在确定
primaryKeyAttribute
选项时,将为
目标
设置不同的值。名称

//sequelize/lib/associations/属于.js

if(this.as){
//如果指定“as”属性。。。
}否则{
this.as=this.target.options.name.singular;
this.options.name=this.target.options.name;
}
如果(!this.foreignKey){
this.foreignKey=Utils.camelize(
[
//如果不指定“as”,则为this.target.options.name.singular
这个,
this.target.primaryKeyAttribute
].加入
);
}
生成
foreignKey
的结果应与
hasMany()
中的以下结果相同

/sequelize/lib/associations/有许多.js

if(!this.foreignKey){
this.foreignKey=Utils.camelize(
[
this.source.options.name.singular,
this.source.primaryKeyAttribute
].加入
);
}
这就是Utils.camelize()的作用

函数camelize(str){
返回str.trim().replace(/[-\us]+(?)/g,(match,c)=>c.toUpperCase());
}

奇怪。无论如何,我总是在关联中显式地指示外键。您也可以尝试这样做,。