帆postgresql多对多协会不工作

我试图在两个模型,运营商和组之间build立多对多的关联。

两个模型是:

-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', 'NA'], 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; 

我创build了具有两列group_operators和operator_groups的连接表group_operators__operator_groups。

在风帆控制台上,我尝试使用此命令进行关联:

  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);}) }); 

但是结果却出现了一个错误:

  null { groups: [], sex: 'F', email: 'nhjfhry@t5rjyi.girtj', 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) 

如果我不创build连接表,并尝试进行关联,则sails控制台返回此错误:

  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,sails-postgresql ^ 0.10.8和postgresql 9.3.4。

我应该创build连接表吗? 问题是什么? 连接表是空的,所以关联不存在。

谢谢!

瓦伦蒂娜

       

网上收集的解决方案 "帆postgresql多对多协会不工作"

我不认为你可以在postgresql中命名表组,因为它将与内部数据库表冲突。 您可以尝试将模型中的tableName重命名为“groups”。 如果这不起作用,你可以试试这个

运营商模式//Operator.js

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

组模型

 //Groups.js . . operators: { collection:'operator', via:'id', dominant:true } . .