I'm currently playing around with associations in Sails.js beta (v 0.10.0-rc4).
I'm trying to relate multiple databases into one result (using sails-mysql
).
The association looks like this Post
-> TagRelation
-> Tag
. And I when I query the Post
table, I want the returned object to include the associated Tag
names.
The models look something like this:
// 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'
}
};
Now, once I go to http://localhost:1337/post/1
I'll get a JSON object with a tag_relations
key, containing an array of TagRelation
objects, but is there a way to get a list of actual Tag
objects they are referring to instead? Or is there a better way to do this?
Sails handles the join table for you, so you don't need the TagRelation
model at all:
// 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'
}
};
This way the blueprint /post/1
will contain all its associated tags
. See the association docs for more info - broken link fixed.
The dominant:true
tag lets Sails know which side of an association to put the join table on, in case the two models are in different databases. We're working on making this optional when the two models are in the same database, but for now it has to be specified explicitly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With