2013-01-05 23 views
14

Sequelize.js उपयोग करते समय, निम्नलिखित कोड किसी भी विदेशी कुंजी टेबल पर नहीं जोड़ता है।Sequelize.js विदेशी कुंजी

var MainDashboard = sequelize.define('main_dashboard', { 
    title: Sequelize.STRING 
}, { 
    freezeTableName: true 
}) 

MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' }) 
MainDashboard.hasOne(MainClient, { foreignKey: 'clientId' }) 

sequelize.sync({ force: true }) 

क्या इन विदेशी कुंजी बाधाओं को जोड़ने के लिए Sequelize.js को मजबूर करने का कोई तरीका है?

उत्तर

3

मैं सिर्फ अपने कोड भागने की कोशिश की, और पंक्तियों ठीक बनाया जा लगते हैं:

CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; 
CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; 

clientIdmain_client में जोड़ा जाता है, और idClient आप थोड़ा उलझन में है main_dashboard

ऐसा लगता है में जोड़ा जाता है क्या एक विधि है। प्रत्येक बार जब आप कॉल करते हैं तो एक एसोसिएशन बनाया जाता है, इसलिए आपका कोड प्रभावी रूप से दो तालिकाओं को दो बार जोड़ता है। विधि आप देख रहे हैं belongsTo

है आप प्रत्येक ग्राहक एक डैशबोर्ड करना चाहते हैं, कोड निम्न होगा:

MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' }) 
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' }) 

यह main_dashboard मेज पर एक clientid क्षेत्र है, जो से संबंधित है बनाता है main_client तालिका

कम belongsTo में की आईडी क्षेत्र, टेबल है कि आप पर विधि बुला रहे हैं के संबंध कहते हैं hasOne तालिका कि तर्क के रूप में दिया जाता है पर यह कहते हैं।

+0

ठीक है, समझ गया। असल में, यह केवल एक बेवकूफ उदाहरण है। हम क्या चाहते हैं डेटाबेस-स्तर की विदेशी कुंजी बाधाओं, जैसे @ डंकोहन ने कहा। – swampcypress

4

आप foreignKeyConstraint जोड़ने की जरूरत है: इससे पहले कि मैं एक ही समस्या थी सच

MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' , foreignKeyConstraint:true }) 
19

प्रयास करें, और हल जब मैं सेटिंग्स Sequelize के कामकाज को समझा।

सीधे बात करने के लिए

!

मान लीजिए हम दो वस्तुओं है: व्यक्ति और पिता

var Person = sequelize.define('Person', { 

     name: Sequelize.STRING 
}); 

var Father = sequelize.define('Father', { 

     age: Sequelize.STRING, 
     //The magic start here 
     personId: { 
       type: Sequelize.INTEGER, 
       references: 'persons', // <<< Note, its table's name, not object name 
       referencesKey: 'id' // <<< Note, its a column name 
     } 
}); 

Person.hasMany(Father); // Set one to many relationship 

शायद यह आपकी मदद

संपादित करें:

आप यह पढ़ बेहतर समझने के लिए कर सकते हैं:

http://docs.sequelizejs.com/en/1.7.0/docs/associations/#foreign-keys

+2

'references' के उपयोग और' referencesKey' अब पदावनत है => 'Utils पदावनत गैर वस्तु संदर्भ संपत्ति पाया। इसके लिए समर्थन संस्करण 4 में हटा दिया जाएगा। अपेक्षित {संदर्भ: {मॉडल: "मान", कुंजी: "कुंजी"}} के बजाय {संदर्भ: "मान", संदर्भ: "कुंजी"}। –

+7

यह एक नहीं है अच्छा उदाहरण, आखिरी आदेश कहता है कि 'एक व्यक्ति के पास कई पिता हैं' जो प्राकृतिक नहीं लगते हैं – Buksy