Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 获取最后插入的id续集_Node.js_Sequelize.js - Fatal编程技术网

Node.js 获取最后插入的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中是如何工作的 如果我的答案错了,请纠正我 被调用对象需要此

我正在使用Sequelize,并试图获取原始查询中最后插入的ID

我的问题是

.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
。我缺少此项。我认为后继会自动把主键看作自动增量列。谢谢