2017-03-01 53 views
0

我的目標是這個對象正常化嵌套實體:規範化共享當前架構

{ 
    talks: [ 
    { 
     id: 1755, 
     speakers: [ 
     { 
      id: 1487, 
      name: 'John Doe', 
     }, 
     ], 
     related_talks: [{ 
     id: 14, 
     speakers: [{ 
      id: 125, 
      name: 'Jane Doe', 
     }], 
     event: { 
      id: 181, 
      name: 'First Annual', 
     }, 
     }], 
     event: { 
     id: 180, 
     name: 'July Party', 
     }, 
    }, 
    ], 
}; 

到這樣的結果:

{ 
    entities: { 
    events: { 
     181: { 
     id: 181, 
     name: 'First Annual' 
     }, 
     180: { 
     id: 180, 
     name: 'July Party' 
     } 
    }, 
    speakers: { 
     125: { 
     id: 125, 
     name: 'Jane Doe' 
     }, 
     1487: { 
     id: 1487, 
     name: 'John Doe' 
     } 
    }, 
    talks: { 
     1755: { 
     id: 1755, 
     event: 181, 
     speakers: [ 1487 ], 
     related_talks: [ 14 ], 
     }, 
     14: { 
     id: 14, 
     speakers: [ 125 ], 
     event: 180, 
     } 
    }, 
    }, 
    result: { 
    talks: [ 1755, 14 ], 
    }, 
} 

如果你會發現,在related_talks項目被處理與talk相同。

我的模式下面的例子中,並設置如下:

const speaker = new schema.Entity('speakers'); 
const event = new schema.Entity('events'); 

export const talk = new schema.Entity('talks', { 
    speakers: [speaker], 
    event, 
}); 

talk.define({ related_talks: [talk] }); 

無論我怎麼努力,我不能得到的物品在related_talks添加到result.talks陣列。但是,它在entities對象中。

爲了適應這種情況,我的模式配置丟失了什麼?

回答

1

不幸的是,如果這是您的要求,Normalizr不適合您。或者,如果您正在通過ID查找「會談」列表,則可以使用Object.keys(data.entities.talks)

+0

感謝您的超級快速回答 - 您能解釋一下爲什麼我可能會_不想這樣做嗎?這不是一個很難的要求,但這是我期望正常工作的方式。 – vinspee

+0

它以這種方式工作,因爲這是輸入的實際結果。你用一個實體來給一個數組進行標準化,所以結果是標準化的形式。 –

+0

所以解決方案是將相關的談話轉移到談判陣列(在API方面),並且在'talk'對象內部,將相關談話陣列改爲僅僅是每個談話的ID?那樣''會談'陣列真的包含所有談話? – vinspee