进入sails.js - 享受模型,路线和最近添加的关联的清洁度。我的困境:
我有用户和群组。两者之间有很多关系。
var User = {
attributes: {
username: 'string',
groups: {
collection: 'group',
via: 'users'
}
}
};
module.exports = User;
...
var Group = {
attributes: {
name: 'string',
users: {
collection: 'user',
via: 'groups',
dominant: true
}
}
};
module.exports = Group;
我很难理解如何保存用户及其相关群组。
我可以直接访问“加入表”吗?
从ajax调用中,我应该如何将组ID列表发送到我的控制器?
如果通过REST URL,这是否已通过更新在蓝图功能中考虑?
如果是这样 - 网址是什么样的? / user / update / 1?groups = 1,2,3?
所有这些都不支持吗?任何见解都很有帮助,谢谢。
答案 0 :(得分:2)
这些蓝图的文档即将发布,但要链接两个具有多对多关联的记录,您可以使用以下REST URL:
POST /user/[userId]/groups
帖子的正文是:
{id: [groupId]}
假设id
是Group
模型的主键。从v0.10-rc5开始,您还可以通过在POST正文中发送有关新组的数据,同时创建一个新组并向用户添加新组,而不是id:
{name: 'myGroup'}
目前,您一次只能添加一个链接的实体。
要以编程方式添加实体,请使用add
方法:
User.findOne(123).exec(function(err, user) {
if (err) {return res.serverError(err);}
// Add group with ID 1 to user with ID 123
user.groups.add(1);
// Add brand new group to user with ID 123
user.groups.add({name: 'myGroup'});
// Save the user, committing the additions
user.save(function(err, user) {
if (err) {return res.serverError(err);}
return res.json(user);
});
});
答案 1 :(得分:0)
回答关于直接访问联接表的问题,
是的,如果您使用的是Model.query函数,则可以这样做。您需要从DB本身检查连接表的名称。不确定是否推荐,但我发现自己有时会遇到不可避免的情况。
有些时候我试图实现的逻辑涉及很多查询,并且需要作为原子事务执行。
在这种情况下,我将所有DB逻辑封装在一个存储的函数中,并使用Model.query
执行该逻辑。var myQuery = "select some_db_function(" + <param> + ")";
Model.query(myQuery, function(err, result){
if(err) return res.json(err);
else{
result = result.rows[0].some_db_function;
return res.json(result);
}
});
由于json数据类型允许我将params作为JSON传递并且还将值作为JSON返回,因此postgres在这里提供了很大的帮助。