【问题标题】:Sequelize auto incerment generating nullSequelize 自动增量生成 null
【发布时间】:2022-01-09 00:43:18
【问题描述】:

这是我的示例模型

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}

【问题讨论】:

    标签: mysql node.js sequelize.js auto-increment


    【解决方案1】:

    这里发生了几件事。

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

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

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

    const savedSample = await newSample.save()
    

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 2020-08-05
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2011-10-10
      • 2016-09-27
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多