sails.js多对多关系连接表中的额外字段

我有两个模型:

Order.js

module.exports = { attributes: { //Id is generated by mongo and is a primary key address: { type: 'string', required: true, size: 1000 }, status: { type: 'string', required: true, size: 15, defaultsTo: 'pending', enum: ['pending', 'processing', 'cancelled'] }, total: { type: 'string', required: true, size: 50 }, menues: { collection: 'menu', via: 'orders', dominant: true }, customer: { model: 'customer' } } }; 

Menu.js

 module.exports = { attributes: { //Id is generated by mongo name: { type: 'string', required: true, size: 255 }, description: { type: 'string', required: true, size: 1000 }, price: { type: 'string', required: true, size: 15 }, picture: { type: 'string', size: 255 }, //Relations orders: { collection: 'order', via: 'menues' } } }; 

有一个多对多的关系,它完美的工作,并创build一个menu_orders__order_menues集合,一切都很好。

但是我需要按顺序为每个菜单保存数量。 如菜单ID“1”数量是2等

所以额外的数据是数量: 每个订单应该有一个确定数量的每个菜单

什么是最好的办法做到这一点,是如何存储在分贝? 我想以某种方式把它存储在关系表中,但我没有如何做。

请让我知道最正确和可接受的解决scheme。

PS我目前使用sails-mongo,但很快就会迁移到MySQLPostgres,所以我需要这样做相对的方式。

quantity字段添加到您的菜单模型模式,并可以使用afterCreate函数为它设置一个值。

Order.js

 module.exports = { attributes: { address: { type: 'string', required: true, size: 1000 }, status: { type: 'string', required: true, size: 15, defaultsTo: 'pending', enum: ['pending', 'processing', 'cancelled'] }, total: { type: 'string', required: true, size: 50 }, menues: { collection: 'menu', via: 'orders', dominant: true }, customer: { model: 'customer' } }, afterCreate: function (order, cb) { Menu.find(order.menues, function (err, menues) { if (err) return cb(err); async.each(menues, function (menu, next) { menu.quantity++; menu.save(next); }, cb); }); } }; 

Menu.js

 module.exports = { attributes: { name: { type: 'string', required: true, size: 255 }, description: { type: 'string', required: true, size: 1000 }, price: { type: 'string', required: true, size: 15 }, picture: { type: 'string', size: 255 }, quantity: { type: 'number', defaultsTo: 0 }, orders: { collection: 'order', via: 'menues' } } }; 

这不是一个完成的解决scheme。 你必须处理afterUpdateafterDestroy函数。