如何在模型上定义同一(父)类型的多个hasMany关系?

时间:2014-12-29 20:05:11

标签: ember.js model coffeescript ember-data ember-cli

我想在父类型的Ember Data模型上定义多个hasMany关系,但我不知道如何为此指定反转:

Profile = DS.Model.extend
  # ...
  friends:      DS.hasMany 'profile', async: true
  observed:     DS.hasMany 'profile', async: true
  observers:    DS.hasMany 'profile', async: true

我很容易在数据库中处理这些属性,但是Ember Data不支持这一点。是否可以在不创建其他模型的情况下定义此3 hasMany关系(例如,Friend,Observer)。

我得到的错误:

  

错误:断言失败:您定义了“朋友”关系   app @ model:profile:,但多个可能的反向关系   输入app @ model:profile:在app @ model上找到:个人资料:看   在   http://emberjs.com/guides/models/defining-models/#toc_explicit-inverses   如何明确指定反转

2 个答案:

答案 0 :(得分:1)

Ember Data希望在belongsTo端有一个外键,以便它可以为您提供任意方向的模型。 Ember Data不直接支持许多关系,因此需要第二个连接模型。

这几乎与您在SQL数据库中建模数据的方式一致。

我不喜欢Ember Data的一个原因是它需要在hasMany方面以及belongsTo方面的id。当您具有高基数关系时,这不是一个很好的方法,因为当基于外键的简单查找更有效时,这意味着大的有效负载和低效查询。它也给人一种幻觉,你可以避免使用第二个模型,你的Profile模型可能只有每个关系的id数组,但它目前还没有那样工作。

答案 1 :(得分:0)

现在有效:

Profile = DS.Model.extend
  # ...
  friends:      DS.hasMany 'profile', async: true
  observed:     DS.hasMany 'observer', async: true, inverse: 'observer'
  observers:    DS.hasMany 'observer', async: true, inverse: 'observed'

Observer = DS.Model.extend
  observer: DS.belongsTo 'profile', async: true
  observed: DS.belongsTo 'profile', async: true

然而,如果没有定义另一个模型,我仍然有兴趣做到这一点。