我最近开始使用SailsJS,我发现定义属性和关联的过程非常优雅。但是,有一点我无法找到:
我有一个模特情侣(person1,person2)。我想在Person中创建一个关联,列出他们所属的每一对。有点像:
attributes{
//other attributes,
couples:{
collection: 'couple',
via: 'person1, person2'
}
}
我目前的方法是:
attributes{
//other attributes,
couples1:{
collection: 'couple',
via: 'person1'
},
couples2:{
collection: 'couple',
via: 'person2'
},
getCouples: function() {
return this.couples1 + this.couples2;
}
}
但这看起来不太漂亮,有没有办法更优雅地做到这一点?
答案 0 :(得分:1)
如果我正确地提出你的问题,你想要一个人及其夫妻,我假设你的夫妻中有一夫一妻制(意味着一个人属于另一个人,反之亦然)你可以与他们建立联系。同样的模特,像这样。
var Person = {
attributes: {
name: {type:'string'},
couple: {model: 'Person', via: 'couple'}
}
};
module.exports = Person
然后您可以像这样创建和关联它们。 (假设帆控制台)
Person.create({name: 'John Doe', couple: {name: 'Jane Doe'} }).exec(console.log)
Person.update(2, {couple:1}).exec(console.log)
检索它们就像
一样简单Person.find({name:'John Doe'}).populate('couple').exec(console.log)
您可以尝试将它们与.add
和.save
相关联,但我不确定当关联指向同一模型时它是否有效,因此请检查它。
另一种选择就是这样:
var Person = {
attributes: {
name: {type:'string'},
couple: {model: 'Couple', via: 'persons'}
}
};
module.exports = Person;
情侣模特拥有一群人,所以你可以添加人 情侣模型,稍后将其与person.couple属性相关联。
var Couple = {
attributes: {
persons: {collection: 'Person', via: 'couple'}
}
};
module.exports = Couple;
或者你可以使用你拥有的东西,这在这种情况下并不理想,但它确实有用。