帆js 2:n关系

时间:2015-09-23 21:08:11

标签: associations sails.js waterline

我最近开始使用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;
    }
}

但这看起来不太漂亮,有没有办法更优雅地做到这一点?

1 个答案:

答案 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;

或者你可以使用你拥有的东西,这在这种情况下并不理想,但它确实有用。