Sequelize 自动增量生成 null

Sequelize auto incerment generating null

这是我的示例模型

const Sequelize = require('sequelize')
const db = require('../DBconfig')

const SampleModel = db.define('sample',{
    id:{
        type: Sequelize.INTEGER,
        primaryKey:true,
        autoIncrement:true,
    },
    name:{
        type: Sequelize.STRING,
        allowNull:true
    }
},{freezeTableName:true}) 

module.exports = SampleModel;

这是一个简单的获取请求,我刚刚向它传递了一个名称值。

router.get('/sample',( req ,res)=>{
    const newSample = SampleModel.build({
        name:"User123"
    })
    console.log(newSample)
})

现在这是我 运行 这个...id 字段为空时的输出

Executing (default): SELECT 1+1 AS result
    sample {
      dataValues: { id: null, name: 'User123' },
      _previousDataValues: { name: undefined },
      _changed: Set { 'name' },
      _options: { isNewRecord: true, _schema: null, _schemaDelimiter: '' },
      isNewRecord: true}

这里发生了几件事。

  1. Sequelize 应该默认创建一个 id 列。我认为您不需要在模型中明确定义它。

  2. 您正在使用 Model.build() 方法,该方法创建模型的新对象实例,但实际上尚未与数据库交互。如果您在实例上调用 .save() 方法,它会将实例提交到数据库,此时应该生成 id。

编辑添加:newSample.save() 不会对 newSample 对象进行任何更改。为了获得包含 id 的实例,您需要从 .save()

获取返回值
const savedSample = await newSample.save()