我目前正在玩Sails.js beta中的协会(v 0.10.0-rc4)。
我尝试将多个数据库关联到一个结果中(使用sails-mysql
)。
该关联看起来像Post
- > TagRelation
- > Tag
。当我查询Post
表时,我希望返回的对象包含关联的Tag
名称。
模型看起来像这样:
// Post model
var Post = {
title: 'string',
body: 'string',
tag_relations: {
collection: 'TagRelation'
via: 'post_id'
}
};
// Tag Relation model
var TagRelation = {
post_id: {
model: 'Post'
},
tag_id: {
model: 'Tag'
}
};
// Tag model
var Tag = {
name: 'string',
tag_relations: {
collection: 'Tag',
via: 'tag_id'
}
};
现在,一旦我转到http://localhost:1337/post/1
,我将获得一个带有tag_relations
键的JSON对象,其中包含TagRelation
个对象的数组,但有没有办法获得相反,他们所指的实际Tag
个对象的列表是什么?或者有更好的方法吗?
答案 0 :(得分:9)
Sails为您处理联接表,因此您根本不需要TagRelation
模型:
// Post model
var Post = {
title: 'string',
body: 'string',
tags: {
collection: 'tag',
via: 'posts',
dominant: true // could be on either model, doesn't matter
}
};
// Tag model
var Tag = {
name: 'string',
posts: {
collection: 'post',
via: 'tags'
}
};
这样蓝图/post/1
将包含其所有关联的tags
。有关详细信息,请参阅association docs - 已修复损坏的链接。
dominant:true
标记允许Sails知道关联的哪一侧放置连接表,以防两个模型位于不同的数据库中。当两个模型位于同一个数据库中时,我们正在努力使其成为可选项,但是现在必须明确指定它。