2013-04-01 7 views
29

सीक्वेलिज़ का दस्तावेज़ autoIncrement के बारे में बहुत कुछ नहीं कहता है।ऑटोडेक्रमेंट नोडजेस के सीक्वेलिज में कैसे काम करता है?

// autoIncrement can be used to create auto_incrementing integer columns 
incrementMe: { type: Sequelize.INTEGER, autoIncrement: true } 

इस उदाहरण मैं निम्नलिखित कोड है के आधार पर:

db.define('Entries', { 
    id: { 
     type: Seq.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    title: { 
     type: Seq.STRING, 
     allowNull: false 
    }, 
    entry: { 
     type: Seq.TEXT, 
     allowNull: false 
    } 
} 

अब जब मैं एक प्रवेश मैं इस तरह कुछ करना चाहता हूँ बनाना चाहते हैं:

यह केवल निम्न उदाहरण में शामिल हैं
models.Entry.create({title:'first entry', entry:'yada yada yada'}) 

हालांकि, जब मुझे लगता है कि कोड निष्पादित मैं एक डेटाबेस त्रुटि मिलती है:

Null value in column "id" violates not null constraint

मुझे लगता है कि Sequelize मेरे लिए पूर्णांक डाल देगा या डेटाबेस तालिका को स्वयं ही करने के लिए परिभाषित करेगा। जाहिरा तौर पर नहीं? यह सुनिश्चित करने के लिए कि क्या आईडी स्वचालित रूप से बढ़ी है और भर गई है, मैं यहां क्या खो रहा हूं?

बहुत धन्यवाद।

उत्तर

14

सामान्य रूप से Sequelize.js डेटाबेस के साथ स्वयं को अनुकूलित करते हैं। तो autoincrement विशेषता PostgreSQL में एक धारावाहिक प्रकार के अनुरूप है।

मैंने पहले ही सेक्विलाइज के साथ काम किया है और मुझे याद है कि आपको प्राथमिक कुंजी के रूप में आईडी निर्दिष्ट करने की आवश्यकता नहीं है। Sequelize यह आपके लिए कर देगा।

एक आईडी विशेषता जोड़ने की कोशिश न करें और देखें कि Sequelize इसे आपके लिए नहीं जोड़ देगा या नहीं।

+0

खेद स्थानांतरित कर दिया परियोजना प्राथमिकताओं, लेकिन मैं इस सप्ताह के अंत में आपके पास वापस आऊंगा। –

+1

यह मेरे उद्देश्यों के लिए सही है, लेकिन फिर भी सोच रहा है 'autoIncrement' का उद्देश्य क्या है यदि आपको इसे हर बार दर्ज करना है। शायद मैं गलत कॉन्फ़िगर किया गया। –

+0

समस्या यह है कि कस्टम प्राथमिक नाम कैसे दें! –

8

omitNull डिफ़ॉल्ट रूप से कॉन्फ़िगरेशन विकल्प गलत है। यह सच करने के लिए सेट करें, और id का ध्यान रखा जाना होगा Postgres द्वारा:

sequelize = new Sequelize('mydb', 'postgres', null, { 
    host: 'localhost', 
    port: 5432, 
    dialect: 'postgres', 
    omitNull: true 
}) 

Visitor = sequelize.define('visitor', { 
    email: Sequelize.STRING 
}) 

Visitor.create({email: '[email protected]'}) 
+5

[इस रिपोर्ट के मुद्दे के अनुसार] (https://github.com/sequelize/sequelize/issues/2813), 'omitNull' का अब उपयोग नहीं किया जाना चाहिए। मॉडल परिभाषा पर संबंधित कॉलम में 'autoIncrement: true' का उपयोग करें और जब आप' create() 'करते हैं तो बस एक मान प्रदान न करें। –

+0

@ थलिसिस। : यह मेरे लिए काम नहीं करता है। लेखक के रूप में एक ही समस्या है। – akohout

+0

@mxgrn, धन्यवाद मेरे लिए यह काम करता है, अगर आप शून्य मान को छोड़ नहीं देते हैं, तो postgresql कथन के अंदर शून्य मान डाल देगा। https://github.com/sequelize/sequelize/issues/925 –

0

यह मेरे लिए काम किया है, तो मैं manualy "आईडी" क्षेत्र मॉडल में जोड़ा (इस मामले में Sequelize यह automaticaly में शामिल नहीं होगा) इस तरह:

Visitor = sequelize.define('visitor', { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    email: Sequelize.STRING 
}) 

परिणाम एसक्यूएल आदेश है: "टेबल बनाते हैं मौजूद नहीं है" आगंतुक "(" आईडी "धारावाहिक," ईमेल "varchar (255) ..."

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