【问题标题】:Node.js sequelize model file don't take into account configurationNode.js sequelize 模型文件不考虑配置
【发布时间】:2018-01-26 01:25:32
【问题描述】:

我的模型文件如下所示:

'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 不读取我的配置选项。 我应该如何准备我的模型文件以便从其中读取配置?

【问题讨论】:

    标签: javascript node.js orm sequelize.js sequelize-cli


    【解决方案1】:

    就我个人而言,我从未使用过表名覆盖,但据我所知,从documentation 和测试herehere,您还需要将freezeTableName 设置为true使用您为模型提供的表名,因此现在您的模型如下所示:

    '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
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2017-11-03
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多