无法在lower_case中获取我的foreignKey,我的所有关联都是PascalCase。
所以我有一个简单的表"user",它有role_id(foreignKey(我有桌子上的"角色"。因此,当创建一个用户时,它工作得很好。但当我查询它时,会搜索foreignKey名称,比如RoleId,而不是role_id。
module.exports = (sequelize, DataTypes) => {
const Role = sequelize.define('Role', {
name: DataTypes.STRING
}, {
tableName: "role"
});
Role.associate = function (models) {
// associations can be defined here
Role.hasMany(models.User)
};
return Role;
}
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
allowNull: false,
autoIncrement: false,
},
email: DataTypes.STRING,
password: DataTypes.STRING,
role_id: DataTypes.INTEGER,
name: DataTypes.STRING,
MerchantId: DataTypes.STRING
}, {
tableName: 'user'
});
User.associate = function (models) {
User.belongsTo(models.Role)
User.belongsTo(models.Merchant)
};
return User;
};
有什么解决方案可以保持所有名称的lower_case_underscore?
我遇到了类似的问题,必须在关系的两侧设置foreignKey,否则它将自动使用RoleId
。
Role.hasMany(models.User, {foreignKey: 'role_id'});
...
User.belongsTo(models.Role, {foreignKey: 'role_id'});
另一个选项是在全局配置中设置underscored: true
。您可以将所有属性名称保留为camel大小写,但表名称和字段名称将使用snake大小写。
config = {
"development": {
...
"define": {
"underscored": true
}
}
}
const sequelize = new Sequelize(config.database, config.username, config.password, config);
尝试
User.belongsTo(models.Role, { foreignKey: 'role_id' ))