2015-03-20 9 views
5

ठीक है तो मैं निम्नलिखित तीन modelsSequelize hasMany

मॉड्यूल है:

var Module = sequelize.define('module', { 
     id: DataTypes.INTEGER, 
     name: DataTypes.STRING, 
     description: DataTypes.STRING, 
     category_id: DataTypes.STRING, 
     module_type_id: DataTypes.STRING, 
     gives_score: DataTypes.INTEGER, 
     duration: DataTypes.STRING, 
     price: DataTypes.STRING 

    }, { 
     freezeTableName: true} 
) 

सक्षमता:

Competence = sequelize.define('competence', { 
     id: DataTypes.INTEGER, 
     name: DataTypes.STRING, 
     organization_id: DataTypes.INTEGER, 
     competence_type_id: DataTypes.INTEGER 
    },{freezeTableName:true}) 

Module_has_competence:

+०१२३५१६४१०
 Module_has_competence = sequelize.define('module_has_competence', { 
    id: DataTypes.INTEGER, 
    module_id: DataTypes.INTEGER, 
    competence_id: DataTypes.INTEGER, 
    score: DataTypes.STRING 
},{ 
    freezeTableName: true} 
}) 

आप तालिकाओं के बीच संबंध देख सकते हैं एक n:m

हैं तो अब मैं पता लगाना चाहते हैं सभी Competence कि एक Module है:

:

तो मैं निम्नलिखित संबंध बनाया

Module.hasMany(Competence, {through: Module_has_competence, foreignKey: 'module_id'}); 

हालांकि जब मैं दौड़ने की कोशिश करता हूं:

retrieveById: function (quote_id, onSuccess, onError) { 
       Module.find({include: [{ all: true }],where: {id: quote_id}}) 
        .success(onSuccess).error(onError); 
      } 

यह कुछ भी नहीं देता है। लेकिन अगर मैं रिश्ते को हटा देता हूं तो यह केवल Module

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

जब मैं डिबग

जब मैं डिबग यह दुर्भाग्य यह यह सिर्फ एसक्यूएल कॉल की अनदेखी कर रहा है लगता है किसी भी एसक्यूएल प्रवेश नहीं करता है?

+0

आप उन बयानों द्वारा उत्पादित एसक्यूएल प्रश्नों पोस्ट कर सकते हैं:

http://docs.sequelizejs.com/en/latest/docs/associations/#one-to-many-associations

यहाँ कैसे मैं इस निष्कर्ष पर मिल गया का सार क्या है?इसके अलावा उस बिंदु पर डीबी आपकी स्थिति उपयोगी होगी –

+0

@DanRocha निश्चित रूप से कृपया लटकाएं: डी –

+0

@DanRocha दुख की बात यह है कि यह कोई भी एसक्यूएल पोस्ट नहीं करता है: मेरे सभी अन्य कार्य करता है लेकिन यह कोई नहीं है: s –

उत्तर

4

मेरी समझ से, आपने कई तालिकाओं के लिए कई टेबल बनाए हैं और जब आप "मॉड्यूल" के लिए पूछते हैं, तो आप उससे संबंधित सभी "योग्यता" चाहते हैं।

हालांकि मैं .hasMany() काम कर पाने के लिए सक्षम नहीं था, का उत्पादन किया त्रुटि थी:

Trace: [TypeError: Cannot call method 'replace' of undefined] 
    at null.<anonymous> (/Users/sjlu/Development/29165644/app.js:61:13) 
    at tryCatch1 (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/util.js:45:21) 
    at Promise._callHandler (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:571:13) 
    at Promise._settlePromiseFromHandler (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:581:18) 
    at Promise._settlePromiseAt (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:713:18) 
    at Promise._settlePromiseAt (/Users/sjlu/Development/29165644/node_modules/sequelize/lib/promise.js:76:18) 
    at Promise._settlePromises (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:854:14) 
    at Async._consumeFunctionBuffer (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/async.js:85:12) 
    at Async.consumeFunctionBuffer (/Users/sjlu/Development/29165644/node_modules/sequelize/node_modules/bluebird/js/main/async.js:40:14) 
    at process._tickCallback (node.js:442:13) 

जो इस उत्पादन डिबग करने के लिए लगभग असंभव है।

हालांकि, मैं अपने मॉडल बाइंडिंग बना सकते हैं और इसे सही ढंग से क्वेरी .belongsToMany() संघों के साथ करने में सक्षम था

Competence.belongsToMany(Module, { 
    through: Module_has_competence, 
    as: 'module', 
    foreignKey: 'module_id' 
}) 
Module.belongsToMany(Competence, { 
    through: Module_has_competence, 
    as: 'competence', 
    foreignKey: 'competence_id' 
}) 

कौन सा एक प्रश्न है कि आप मेरी समझ .hasMany करने के लिए

SELECT `module`.`id`, 
     `module`.`name`, 
     `module`.`description`, 
     `module`.`category_id`, 
     `module`.`module_type_id`, 
     `module`.`gives_score`, 
     `module`.`duration`, 
     `module`.`price`, 
     `module`.`createdat`, 
     `module`.`updatedat`, 
     `competence`.`id`         AS `competence.id`, 
     `competence`.`name`        AS `competence.name`, 
     `competence`.`organization_id`      AS 
     `competence.organization_id`, 
     `competence`.`competence_type_id`     AS 
     `competence.competence_type_id`, 
     `competence`.`createdat`       AS 
     `competence.createdAt`, 
     `competence`.`updatedat`       AS 
     `competence.updatedAt`, 
     `competence.module_has_competence`.`id`   AS 
     `competence.module_has_competence.id`, 
     `competence.module_has_competence`.`module_id`  AS 
     `competence.module_has_competence.module_id`, 
     `competence.module_has_competence`.`competence_id` AS 
     `competence.module_has_competence.competence_id`, 
     `competence.module_has_competence`.`score`   AS 
     `competence.module_has_competence.score`, 
     `competence.module_has_competence`.`createdat`  AS 
     `competence.module_has_competence.createdAt`, 
     `competence.module_has_competence`.`updatedat`  AS 
     `competence.module_has_competence.updatedAt` 
    FROM `module` AS `module` 
     LEFT OUTER JOIN (`module_has_competence` AS 
         `competence.module_has_competence` 
          INNER JOIN `competence` AS `competence` 
            ON `competence`.`id` = 
    `competence.module_has_competence`.`module_id`) 
    ON `module`.`id` = 
    `competence.module_has_competence`.`competence_id` 
    WHERE `module`.`id` = 1; 

देख रहे आउटपुट संदर्भ 1: एम रिश्ते, जिसमें एक जॉइन टेबल की आवश्यकता नहीं है।

https://gist.github.com/sjlu/fa5c2e0e267cd692418a

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