2014-10-02 6 views
7

मैं दो मॉडल, ऑपरेटर और समूह के बीच कई संगठनों को बनाने की कोशिश कर रहा हूं।सेल पोस्टग्रेस्क्ल कई-से-कई एसोसिएशन काम नहीं कर रहे हैं

दो दो मॉडल हैं:

-Operator.js

var Operator = { 
    connection:'postgresql', 
    tableName: 'operator', 
    schema:true, 
    attributes: { 

    firstName: { 
     type: 'string', 
     required: true, 
     max: 64, 
     columnName: 'first_name' 
    }, 
    lastName: { 
     type: 'string', 
     required: true, 
     max: 64, 
     columnName: 'last_name' 
    }, 
    birthDate: { 
     type: 'date', 
     columnName: 'birth_date' 
    }, 
    sex: { 
     type: 'string', 
     enum: ['M', 'F', 'N.A.'], 
     columnName: 'sex' 
    }, 
    email: { 
     type: 'email', 
     required: true, 
     columnName: 'email' 
    }, 
    login: { 
     type: 'string', 
     required: true, 
     max: 64 
    }, 
    password: { 
     type: 'string', 
     required: true 
    }, 

    createdAt: { 
     columnName: 'created_at' 
    }, 

    updatedAt: { 
     columnName: 'updated_at' 
    }, 

    groups:{ 
     collection:'group', 
     via:'operators' 
    }, 

    // Override toJSON instance method 
    // to remove password value 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 


}, 

// Lifecycle Callbacks 
beforeCreate: function(values, next) { 
    bcrypt.hash(values.password, 10, function(err, hash) { 
     if(err) return next(err); 
     values.password = hash; 
     next(); 
    }); 
} 

}; 

module.exports = Operator; 

-Group.js

var bcrypt = require('bcrypt'); 

    var Group = { 
    connection:'postgresql', 
    tableName: 'group', 
    schema:true, 
    attributes: { 
    name: { 
     type: 'string', 
     required: true, 
     unique:true, 
     columnName: 'name' 
    }, 
    createdAt: { 
     columnName: 'created_at' 
    }, 
    updatedAt: { 
     columnName: 'updated_at' 
    }, 

    operators: 
     { 
     collection:'operator', 
     via:'groups', 
     dominant:true 
    } 
     } 
}; 
module.exports = Group; 

मैं मेज group_operators__operator_groups है कि दो कॉलम group_operators और operator_groups में शामिल होने के लिए बनाया। और

null 
    { groups: [], 
    sex: 'F', 
    email: '[email protected]', 
    login: 'tryjrtyh', 
    password: '$2a$10$3pOYcOpWWcU868LBB0Gki./n9nrooXyDqSNYz1NJCkvQ480KT5uxO', 
    id: 149, 
    firstName: 'fgterier', 
    lastName: 'gdfgjdi', 
    birthDate: Thu Sep 25 2014 00:00:00 GMT+0200 (CEST), 
    createdAt: null, 
    updatedAt: Thu Oct 02 2014 12:45:14 GMT+0200 (CEST) } 
    [ { type: 'insert', 
    collection: 'group_operators__operator_groups', 
    criteria: { group_operators: 19, operator_groups: 149 }, 
    values: { group_operators: 19, operator_groups: 149 }, 
    err: [Error: Trying to '.add()' an instance which already exists!] } ] 

    Possibly unhandled Error: [object Object] 
    at Object.Promise$_rejecter [as reject] (/usr/lib/node_modules/sails/node_modules/waterline/node_modules/bluebird/js/main/promise.js:601:58) 
at /usr/lib/node_modules/sails/node_modules/waterline/lib/waterline/model/lib/defaultMethods/save.js:154:16 
at /usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:454:17 
at /usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:444:17 
at Array.forEach (native) 
at _each (/usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:46:24) 
at Object.taskComplete (/usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:443:13) 
at processImmediate [as _immediateCallback] (timers.js:345:15) 

अगर मैं टेबल में शामिल होने का निर्माण नहीं करतीं मैं:

 Operator.find(149).populate('groups').exec(function(e,r){ 
    console.log(e); 
    r[0].groups.add(19); 
    console.log(r[0]); 
    r[0].save(function(err){ 
       console.log(err);}) 
    }); 

लेकिन परिणाम एक त्रुटि दिखाई:

पाल कंसोल पर मैं इस आदेश के सहयोग से करने की कोशिश की

Error (E_UNKNOWN) :: Encountered an unexpected error 
    error: relation "group_operators__operator_groups" does not exist 
    at Connection.parseE (/home/valentina/workspace/xtens-app/node_modules/sails-  postgresql/node_modules/pg.js/lib/connection.js:534:11) 
at Connection.parseMessage (/home/valentina/workspace/xtens-app/node_modules/sails-postgresql/node_modules/pg.js/lib/connection.js:361:17) 
at Socket.<anonymous> (/home/valentina/workspace/xtens-app/node_modules/sails-postgresql/node_modules/pg.js/lib/connection.js:105:22) 
at Socket.emit (events.js:95:17) 
at Socket.<anonymous> (_stream_readable.js:764:14) 
at Socket.emit (events.js:92:17) 
at emitReadable_ (_stream_readable.js:426:10) 
at emitReadable (_stream_readable.js:422:5) 
at readableAddChunk (_stream_readable.js:165:9) 
at Socket.Readable.push (_stream_readable.js:127:10) 

Details: error: relation "group_operators__operator_groups" does not exist 

मैं पाल 0.10.5 उपयोग कर रहा हूँ, पाल-स्थिति: संघ बनाने की कोशिश, पाल सांत्वना इस त्रुटि देता है tgresql^0.10.8 और postgresql 9.3.4।

क्या मुझे जॉइन टेबल बनाना चाहिए? समस्या क्या है? जॉइन टेबल खाली है, इसलिए एसोसिएशन मौजूद नहीं है।

धन्यवाद!

वेलेंटीना

+0

इस दुर्घटनाग्रस्त पाल की कोशिश कर सकते है? – sgress454

+0

नहीं, यह सेल को दुर्घटनाग्रस्त नहीं कर रहा है। सेल काम कर रही है। –

उत्तर

0

मुझे नहीं लगता कि आप PostgreSQL में एक तालिका समूह नाम कर सकते हैं, क्योंकि यह डेटाबेस आंतरिक तालिका का उल्लंघन करेगा है। आप मॉडल नाम को 'समूह' में तालिका नाम का नाम बदलने का प्रयास कर सकते हैं। यदि वह काम नहीं करता है, तो आप इस

ऑपरेटर मॉडल //Operator.js

. 
. 
. 
    groups:{ 
     collection:'group', 
     via:'id' 
    }, 
. 
. 

समूह मॉडल

//Groups.js 

. 
. 
    operators: 
     { 
     collection:'operator', 
     via:'id', 
     dominant:true 
    } 
. 
. 
संबंधित मुद्दे