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}
这里发生了几件事。
Sequelize 应该默认创建一个 id 列。我认为您不需要在模型中明确定义它。
您正在使用 Model.build() 方法,该方法创建模型的新对象实例,但实际上尚未与数据库交互。如果您在实例上调用 .save() 方法,它会将实例提交到数据库,此时应该生成 id。
编辑添加:newSample.save() 不会对 newSample 对象进行任何更改。为了获得包含 id 的实例,您需要从 .save()
获取返回值
const savedSample = await newSample.save()
这是我的示例模型
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}
这里发生了几件事。
Sequelize 应该默认创建一个 id 列。我认为您不需要在模型中明确定义它。
您正在使用 Model.build() 方法,该方法创建模型的新对象实例,但实际上尚未与数据库交互。如果您在实例上调用 .save() 方法,它会将实例提交到数据库,此时应该生成 id。
编辑添加:newSample.save() 不会对 newSample 对象进行任何更改。为了获得包含 id 的实例,您需要从 .save()
获取返回值const savedSample = await newSample.save()