我使用最近发布的风帆v0.10.2,我无法使用多对多模型关联。这是我尝试构建的内容:
// models/Group.js
module.exports = {
identity: 'Group',
attributes: {
...
admins: {
collection: 'User',
via: 'groups',
dominant: true
},
...
// models/User.js
module.exports = {
identity: 'User',
attributes: {
...
groups: {
collection: 'Group',
via: 'admins'
},
...
据我所知,这应该在这些模型之间建立多对多关联。它们都存储在sails-memory上进行开发。
// function is called when a group-creation form is filled in the frontend.
create: function(req, res, cb) {
Group.create( req.params.all() ).exec( function(err, group) {
if (err) { console.log(err); return cb(err); }
else {
group.admins.add(req.user.id);
group.save(function(err){
if(err){console.log(err);}
else {
console.log('binding user to group:');
console.log(req.user);
console.log(group);
}
});
res.json(group);
}
});
},
输出如下:
binding user to group
{ username: me
.. some other things ..
createdAt: Sat Aug 09 2014 10:13:15 GMT-0700 (PDT),
updatedAt: Sat Aug 09 2014 10:13:24 GMT-0700 (PDT),
id: 1 }
{ name: 'this is my group',
description: 'this is mah desccription',
tags: [ 'tag' ],
createdAt: Sat Aug 09 2014 10:13:43 GMT-0700 (PDT),
updatedAt: Sat Aug 09 2014 10:13:43 GMT-0700 (PDT),
id: 1 }
对我来说意味着用户模型的groups字段没有被修改,因为它不仅不存在,而且updatedAt字段没有注册更改。有一些可能的原因,这是我能想到的失败:
Sails内存不支持模型关联(即使我正在运行v0.10.2)
发生了非常异步和奇怪的事情。
涉及.populate()函数的东西。
完全是另一回事。
答案 0 :(得分:1)
事实证明,我对数据库和连接一无所知。我的假设基本上是这样的:
我的模型有一个admins属性,Groups.admins.add()函数会找到User模型,只是在那里放置一个用户模型的链接,这样res.json(group)将返回该组具有自己填充User对象的admins属性。
事实证明并非如此,您需要手动.find()然后.populate('fieldName')模型,这可能会在数据库端节省大量开销。
我最初有10个嫌疑人(其中4个是上面的嫌疑人)并且在敲出它们的时候,我在sails-memory github上轻轻地打开了一个问题,一个友好的香蕉帮我解决了。
https://github.com/balderdashy/sails-memory/issues/13#issuecomment-51862742