【问题标题】:How to keep sequelize associations name in lower_case?如何将续集关联名称保持为小写?
【发布时间】:2021-01-14 20:05:46
【问题描述】:

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

【问题讨论】:

  • 如果您希望所有表的所有外键都在蛇形案例中,并且您使用 sequelize v4,您可以使用 underscoredAll 选项。从 v5 开始,此选项已被删除。

标签: node.js postgresql sequelize.js naming-conventions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试

    User.belongsTo(models.Role, { foreignKey: 'role_id' ))
    

    【讨论】:

    • 我不得不在 camelCase 中重命名我的所有模型以摆脱 pascalcase。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2021-09-25
    相关资源
    最近更新 更多