1

我的模型文件如下所示:

'use strict'

module.exports = function (sequelize, DataTypes) {
  let User = sequelize.define('user', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    }
  }, {
    classMethods: {
      associate: function(models) {
        this.belongsToMany(models.role, {
          through: {
            model: 'user_role'
          },
          foreignKey: 'user_id'
        })
      }
    }
  }, {
    tableName: 'user',
    timestamps: false,
    underscored: true
  }
)
return User
}

当我尝试对此模型进行任何查询时,我得到一个错误,SequelizeDatabaseError: Table 'sc.users' doesn't exist. 数据库users确实不存在,它的名字是user. tableName: 'user'我在我的模型 ( )中添加了有关它的信息。

我不明白为什么 sequelize 不阅读我的配置选项。我应该如何准备我的模型文件以便可以从中读取配置?

4

1 回答 1

0

就个人而言,我从未使用过表名覆盖,但据我从文档和测试herehere中可以看出,您还需要设置freezeTableNametrue才能使用您为模型提供的表名,所以现在您的模型看起来像:

'use strict'

module.exports = function (sequelize, DataTypes) {
  let User = sequelize.define('user', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    }
  }, {
    classMethods: {
      associate: function(models) {
        this.belongsToMany(models.role, {
          through: {
            model: 'user_role'
          },
          foreignKey: 'user_id'
        })
      }
    }
  }, {
    freezeTableName: true,
    tableName: 'user',
    timestamps: false,
    underscored: true
  })
  return User
}
于 2017-08-20T19:10:42.063 回答