ops*_*rio 12 node.js sequelize.js
我正在使用Sequelize,我正在尝试在原始查询中获取最后插入的ID.
我的疑问是
.query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2])
Run Code Online (Sandbox Code Playgroud)
查询完成,但成功事件的结果为null.
有人可以帮忙吗?
谢谢.
伙计们,
经过一些研究和千万次尝试后,我理解了被调用者对象在sequelizeJs中是如何工作的.
如果我的答案错了,请纠正我.
被调用者对象需要这种结构
{__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"parameterName"是将存储新ID的字段,sequelize查找__factory.autoIncrementField以将最后插入的id的值设置为属性及其值(__factory.autoIncrementField的值).
所以,我对querys方法的调用就是
.query(sequelize.Utils.format(tempInsert), {__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }, {raw: true})
Run Code Online (Sandbox Code Playgroud)
这将导致像这样的对象
{ __factory: { autoIncrementField: 'parameterName' }, parameterName: newInserted_ID }
Run Code Online (Sandbox Code Playgroud)
感谢所有人,我希望这可以帮助别人.
Mir*_*aGe 16
您必须在模型定义中添加autoIncrement属性.
const Article = sequelize.define('articles', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}, {},
{
createdAt: false,
updatedAt: false
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以在模型定义中使用属性访问最后插入的id.
Article.create(article)
.then(result => console.log(result.id));
Run Code Online (Sandbox Code Playgroud)
是的你的答案是有效的.另一种方式是
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)
})
})
Run Code Online (Sandbox Code Playgroud)