2013-05-23 5 views
10

मैं Sequelize का उपयोग कर रहा हूं और मैं कच्ची क्वेरी में अंतिम डाली गई आईडी प्राप्त करने का प्रयास कर रहा हूं।अंतिम डाला गया आईडी प्राप्त करें Sequelize

मेरे क्वेरी

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

क्वेरी पूरी तरह से किया जाता है, लेकिन सफलता घटना पर परिणाम अशक्त है।

क्या कोई मदद कर सकता है?

धन्यवाद।


दोस्तों,

कुछ शोध और zillions प्रयासों के बाद, मैं sequelizeJs में कैसे कॉल प्राप्त करने वाला वस्तु काम समझा।

कृपया, अगर मेरा उत्तर गलत है तो मुझे सही करें।

कॉल प्राप्त करने वाला वस्तु इस मामले "parameterName" में इस संरचना

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

जरूरत क्षेत्र है कि नए आईडी स्टोर करेगा है, sequelize __factory.autoIncrementField साथ संपत्ति में पिछले डाला आईडी का मान सेट करने के लिए लग रहा है इसके मूल्य (__factory.autoIncrementField का मान)।

हां, तो querys विधि करने के लिए अपने कॉल

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

इस तरह सभी के लिए है कि

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

धन्यवाद वस्तु में परिणाम होगा होगा, और मुझे आशा है कि यह किसी की मदद कर सकते हैं।

+0

क्या आप यह काम करने में कामयाब रहे? मैं एक ही मुद्दे पर आया हूं –

उत्तर

3

हाँ आपका उत्तर काम कर रहा है। एक और तरीका होगा

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

मैं उत्सुक हूं, आप 'कच्चे: झूठी' सेटिंग कर रहे हैं, लेकिन आपकी क्वेरी एक कच्ची क्वेरी है। क्या मुझे 'कच्ची' संपत्ति का उद्देश्य याद आ रहा है? क्या आप समझा सकते हैं कि आपने ऐसा क्यों किया? – Gavin

+1

अब तक मुझे याद है, 'कच्चा: सत्य' परिणाम मॉडल में मैप नहीं करेगा। – Kamrul

+1

यह जानना बहुत उपयोगी है! धन्यवाद – Gavin

5

आप मॉडल परिभाषा AutoIncrement संपत्ति जोड़ने के लिए।

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)); 
+0

मुझे यह याद आ रही थी।मैंने सोचा कि Sequelize स्वचालित रूप से ऑटो कुंजी वृद्धि कॉलम के रूप में प्राथमिक कुंजी पर विचार करेगा। धन्यवाद। –

संबंधित मुद्दे