Node.js 获取最后插入的id续集
我正在使用Sequelize,并试图获取原始查询中最后插入的ID 我的问题是Node.js 获取最后插入的id续集,node.js,sequelize.js,Node.js,Sequelize.js,我正在使用Sequelize,并试图获取原始查询中最后插入的ID 我的问题是 .query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2]) 查询完成得很完美,但success事件的结果为null 有人能帮忙吗 谢谢 经过一些研究和无数次尝试,我了解了被调用对象在sequelizeJs中是如何工作的 如果我的答案错了,请纠正我 被调用对象需要此
.query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2])
查询完成得很完美,但success事件的结果为null
有人能帮忙吗
谢谢
经过一些研究和无数次尝试,我了解了被调用对象在sequelizeJs中是如何工作的 如果我的答案错了,请纠正我 被调用对象需要此结构
{__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }
在本例中,“parameterName”是存储新ID的字段,sequelize将查找_factory.autoIncrementField以将上次插入的ID的值与其值(值为_factory.autoIncrementField)一起设置到属性中
因此,我对querys方法的调用是
.query(sequelize.Utils.format(tempInsert), {__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }, {raw: true})
这将导致这样的对象
{ __factory: { autoIncrementField: 'parameterName' }, parameterName: newInserted_ID }
谢谢大家,我希望这能帮助一些人。是的,你的答案有效。另一种方法是
var Sequelize = require("sequelize")
var sequelize = new Sequelize('test', 'root', 'root', {dialect: 'mysql'})
var Page = sequelize.define( 'page', {
type : {type: Sequelize.STRING(20)},
order : {type: Sequelize.INTEGER, defaultValue: 1}
},{
timestamps: false,
underscored: true
})
Page.__factory = {autoIncrementField: 'id'}
Page.id = ''
sequelize.query('INSERT INTO pages SET `type` = ?, `order` = ?, `topic_version_id` = ?', Page, {raw: false}, ['TEXT', 1, 1] ).success(function(page) {
console.log(page)
Page.find(page.id)
.success(function(result){
console.log(result)
})
})
必须在模型定义中添加自动增量属性
const Article = sequelize.define('articles', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}, {},
{
createdAt: false,
updatedAt: false
});
Article.create(article)
.then(result => console.log(result.id));
然后,可以使用模型定义中的属性访问最后插入的id
const Article = sequelize.define('articles', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}, {},
{
createdAt: false,
updatedAt: false
});
Article.create(article)
.then(result => console.log(result.id));
你设法让它工作了吗?我也遇到过同样的问题我很好奇,您正在设置
raw:false
,但您的查询是原始查询。我是否缺少raw
属性的用途?您能解释一下为什么要这样做吗?到目前为止,我记得,raw:true
不会将结果映射到模型中。了解这一点非常有用!谢谢你刚刚进入Sequeulize。我用一列定义了我的模型:``id:{type:DataTypes.INTEGER,autoIncrement:true,primaryKey:true}```但是我获取插入id的唯一方法是使用上面的方法。这似乎很奇怪?有没有其他地方没有记录这一点的原因?只是想提一下,现在,当id
字段定义为id:{type:Sequelize.INTEGER,primaryKey:true,autoIncrement:true}时,我能够在save
或create
之后获得id
。关键部分是autoIncrement
,如果将其删除,您将无法返回id
。我缺少此项。我认为后继会自动把主键看作自动增量列。谢谢