Sails.js中的多个关联

时间:2014-03-25 15:40:53

标签: javascript node.js associations sails.js

我目前正在玩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个对象的列表是什么?或者有更好的方法吗?

1 个答案:

答案 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知道关联的哪一侧放置连接表,以防两个模型位于不同的数据库中。当两个模型位于同一个数据库中时,我们正在努力使其成为可选项,但是现在必须明确指定它。