Sequelizeを使用していて、生のクエリで最後に挿入されたIDを取得しようとしています。
私の質問は
.query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2])
クエリは完全に実行されますが、成功イベントの結果はnullです。
誰かが助けることができますか?
ありがとう。
みんな、
いくつかの調査と無数の試みの後、私はcalleeオブジェクトが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)
})
})
モデル定義にautoIncrementプロパティを追加する必要があります。
const Article = sequelize.define('articles', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}, {},
{
createdAt: false,
updatedAt: false
});
次に、モデル定義のプロパティを使用して、最後に挿入されたIDにアクセスできます。
Article.create(article)
.then(result => console.log(result.id));