首页 > 解决方案 > 如何将续集关联名称保持为小写?

问题描述

无法以小写形式获取我的 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 ?

标签: node.jspostgresqlsequelize.jsnaming-conventions

解决方案


我遇到了类似的问题,不得不在关系的两边都设置 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);

推荐阅读