2014-12-29 2 views
1

나는 부모 타입의 엠버 데이터 모델에 대한 여러 hasMany의 관계를 정의 할,하지만 난 어떻게에 대한 역원을 지정하는 단서가없는 : 나 이러한 속성을 처리하는모델에 동일한 (상위) 유형의 여러 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 관계를 정의 할 수 있습니까?

오류 내가 갖는이 작동

Error: Assertion Failed: You defined the 'friends' relationship on [email protected]:profile:, but multiple possible inverse relationships of type [email protected]:profile: were found on [email protected]:profile:. Look at http://emberjs.com/guides/models/defining-models/#toc_explicit-inverses for how to explicitly specify inverses

답변

1

Ember Data는 belongsTo쪽에 외래 키를 갖고 싶어하므로 어느 방향 으로든 모델을 연결할 수 있습니다. Ember Data는 여러 관계를 직접 지원하지 않으므로 두 번째 조인 모델이 필요합니다.

이것은 SQL 데이터베이스에서 데이터를 모델링하는 방법과 거의 일치합니다.

엠버 데이터와 가장 싫어하는 것 중 하나는 hasMany 쪽과 belongsTo 쪽에서 ids를 원한다는 사실입니다. 이것은 단순한 외래 키 기반 조회가 더 효율적일 때 큰 페이로드 및 비효율적 인 쿼리를 의미하므로 카디널리티 관계가 높을 때 좋은 방법이 아닙니다. 또한 두 번째 모델을 피할 수 있고 각 관계에 대한 ID의 배열을 가질 수 있지만 현재는 그렇게 작동하지 않는다는 환상을 제공합니다.

+0

정확하게 'friends'(프로필의 'belongsTo'profile '없음)에 역 지정이 없으며 예상대로 작동합니다. 배열을 수동으로 추가/삭제해야합니다 - 왜 그것이 더 많은 hasMany 함께 작동하지 않습니다? 여기에 일관성이 부족한 것 같습니다. 나는 친구들과 오류를 가져야한다 : DS.hasMany 'profile', async : true'. –

+0

예. 역행렬을 사용하지 않고 혼합 결과를 얻을 수 있습니다. 관계는 한 방향으로 만 탐색 할 수 있으며 양측의 관계를 동기화 상태로 유지하려면 수동 개입이 필요합니다. 엠버 데이터는 당신이 당신의 관계 중 하나를 위해 일하는 왜 인버스 옵션을 생략 할 때 유형을 통해 관련 모델을 비밀리에 결정합니다. –

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 

는 그러나, 나는 여전히 관심이 있어요.