2013-05-23 17 views
10

Używam Sequelize i próbuję uzyskać ostatnio wstawiony identyfikator w surowym kwerendy.Pobierz ostatnią wstawioną id Sequelize

Moje zapytanie jest

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

Zapytanie jest zrobione perfekcyjnie, ale wynik na razie sukces jest zerowy.

Czy ktoś może pomóc?

Dzięki.


Guys,

po niektórych badań i prób Zillions, zrozumiałem jak wywoływany prace obiektowe w sequelizeJs.

Proszę, popraw mnie, jeśli moja odpowiedź jest błędna.

wywoływany obiekt potrzebuje tej struktury

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

w tym przypadku „ParameterName” jest dziedziną, która będzie przechowywać nowy identyfikator, sequelize szuka __factory.autoIncrementField ustawić wartość ostatniego wstawiony id na działce z jego wartość (wartość __factory.autoIncrementField).

tak, mój wywołanie metody querys byłoby

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

spowoduje to obiekt jak ten

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

podziękowania dla wszystkich, i mam nadzieję, że może to komuś pomóc.

+0

Udało ci się to sprawić? Znalazłem ten sam problem –

Odpowiedz

3

Tak, twoja odpowiedź działa. Innym sposobem byłoby

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

Jestem ciekawy, ustawiasz 'raw: false', ale twoje zapytanie jest surowym zapytaniem. Czy brakuje mi celu "raw"? Czy możesz wyjaśnić, dlaczego to zrobiłeś? – Gavin

+1

jak dotąd pamiętam, 'raw: true' nie odwzoruje wyniku na model. – Kamrul

+1

Jest to bardzo przydatne wiedzieć! Dziękuję – Gavin

5

Trzeba dodać właściwość autoIncrement w definicji modelu.

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

Następnie można uzyskać dostęp do ostatnio wstawionego identyfikatora z właściwością w definicji modelu.

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

Brakowało mi tego.Myślałem, że Sequelize automatycznie uzna klucz podstawowy za kolumnę automatycznego przyrostu. Dzięki. –

Powiązane problemy