node.js - 如何将续集关联名称保持为小写?
问题描述
无法以小写形式获取我的 foreignKey,我所有的关联都是 PascalCase。
所以我有一个带有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
在全局配置中设置。您可以将所有属性名称保留为驼峰式,但表名和字段名将采用蛇形。
config = {
"development": {
...
"define": {
"underscored": true
}
}
}
const sequelize = new Sequelize(config.database, config.username, config.password, config);
推荐阅读
- css - 使用 VUE CLI 3 配置 SASS 加载器(替换 Koala-app)
- java - 数组的索引超出范围(java)
- html - 如何解决没有在 Django 模板上加载的 CSS 背景图像
- android - Flutter:ListView 里面的 ListView.builder
- autodesk-forge - Forge Viewer:搜索或模型浏览器
- reactjs - 如何在反应中向 Firebase REST API 发送 POST 请求
- python - Python & Google Sheets - 在第 5 行和第 3 列中查找元素
- c - 将 c 程序中的内存与 AVX 的外部程序集对齐
- python - 当我从文件中提取数据时尝试在 python 脚本中使用 read(\n) 时出现 TypeError
- mysql - MySQL Select with join & max 给出了意外的输出