是的,sails 0.10.x 及以后版本支持关联。这是设置模型的方法
以下是您的用户模型的外观:
// User.js
module.exports = {
tableName: "users",
attributes: {
name: {
type: "string",
required: true
},
groups: {
collection: "group",
via: "id"
}
}
};
以下是您的组模型的外观:
// Group.js
module.exports = {
tableName: "groups",
attributes: {
name: {
type: "string",
required: "true"
}
}
};
像这样设置模型将在您的数据库中创建三个表:
用户、组和 group_id__user_group
最后一个表由水线创建以保存关联。现在继续创建组。创建组后,继续创建用户。这是创建新用户的示例 POST 请求
{
"name": "user1",
"groups": ["547d84f691bff6663ad08147", "547d850c91bff6663ad08148"]
}
这将以以下方式将数据插入 group_id__user_group
{
"_id" : ObjectId("547d854591bff6663ad0814a"),
"group_id" : ObjectId("547d84f691bff6663ad08147"),
"user_groups" : ObjectId("547d854591bff6663ad08149")
}
/* 1 */
{
"_id" : ObjectId("547d854591bff6663ad0814b"),
"group_id" : ObjectId("547d850c91bff6663ad08148"),
"user_groups" : ObjectId("547d854591bff6663ad08149")
}
列 user_groups 是用户 ID。group_id 是组 ID。现在,如果您使用 GET 请求获取用户,您的响应将如下所示:
{
"groups": [
{
"name": "group1",
"createdAt": "2014-12-02T09:23:02.510Z",
"updatedAt": "2014-12-02T09:23:02.510Z",
"id": "547d84f691bff6663ad08147"
},
{
"name": "group2",
"createdAt": "2014-12-02T09:23:24.851Z",
"updatedAt": "2014-12-02T09:23:24.851Z",
"id": "547d850c91bff6663ad08148"
}
],
"name": "user1",
"createdAt": "2014-12-02T09:24:21.182Z",
"updatedAt": "2014-12-02T09:24:21.188Z",
"id": "547d854591bff6663ad08149"
}
请注意,组没有嵌入到用户集合中。Waterline 会从组、用户和 group_id__user_group 中获取,以向您显示此结果。
此外,如果您想在控制器中执行此操作,则需要像这样执行
User.findOne({'id': "547d854591bff6663ad08149"})
.populate('groups')
.exec(function (err, user){
// handle error and results in this callback
});
如果没有填充('groups'),您将无法获得组数组。希望这符合您的目的