2013-05-23 10 views
10

Ich benutze Sequelize und ich versuche, die letzte eingefügte ID in roher Abfrage zu erhalten.Die letzte eingefügte ID erhalten Sequelize

Meine Frage ist

.query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2]) 

Die Abfrage perfekt gemacht wird, aber das Ergebnis auf Erfolgsereignis ist null.

Kann jemand helfen?

Danke.


Jungs,

nach einigen Untersuchungen und zig Millionen Versuche, verstand ich, wie Rufenen in sequelizeJs Objekt arbeiten.

Bitte korrigieren Sie mich, wenn meine Antwort falsch ist.

das Angerufene Objekt benötigt diese Struktur

{__factory:{autoIncrementField: 'parameterName'}, parameterName: '' } 

in diesem Fall „parameter“ ist das Feld, das die neue ID gespeichert werden, sequelize sucht __factory.autoIncrementField Wert von zuletzt eingefügter ID in Eigenschaft zu setzen mit ihrem Wert (Wert von __factory.autoIncrementField).

so, mein Aufruf an querys Methode wäre

.query(sequelize.Utils.format(tempInsert), {__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }, {raw: true}) 

dies im Objekt führen wie der

{ __factory: { autoIncrementField: 'parameterName' }, parameterName: newInserted_ID } 

Dank für alle, und ich hoffe, dass dies jemanden helfen kann.

+0

Haben Sie das geschafft? Ich bin auf das gleiche Problem gestoßen –

Antwort

3

Ja Ihre Antwort funktioniert. Eine andere Möglichkeit wäre

sein
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) 
    }) 

}) 
+0

Ich bin neugierig, Sie setzen 'roh: falsch', aber Ihre Abfrage ist eine rohe Abfrage. Fehle ich den Zweck der "rohen" Eigenschaft? Können Sie erklären, warum Sie das getan haben? – Gavin

+1

soweit ich mich erinnere, "roh: wahr" wird das Ergebnis nicht in das Modell einordnen. – Kamrul

+1

Das ist sehr nützlich zu wissen! Vielen Dank – Gavin

5

Sie haben autoIncrement Eigenschaft in Modelldefinition hinzuzufügen.

const Article = sequelize.define('articles', { 
    id: { 
    type: Sequelize.INTEGER, 
    primaryKey: true, 
    autoIncrement: true 
    }, {}, 
    { 
    createdAt: false, 
    updatedAt: false 
    }); 

Dann können Sie auf die zuletzt eingefügte ID mit der Eigenschaft in der Modelldefinition zugreifen.

Article.create(article) 
    .then(result => console.log(result.id)); 
+0

Ich habe das vermisst.Ich dachte, Sequelize wird den Primärschlüssel automatisch als Autoinkrement-Spalte betrachten. Vielen Dank. –

Verwandte Themen