2016-09-08 3 views
0

Hier ist der Code:Ecto Vorspannung und kommen verschachtelte Modelle

query = from(p in Tree, 
    where: p.name == ^tree, 
    where: p.user_id == ^user_id, 
     preload: [kw: :keyo] 
    ) 
    data = Repo.all(query) 

Dies funktioniert aber gibt Daten in dieser Struktur wie folgt aus:

{ 
Kw: [ 
    {user_id: 1, keyo_id: 2, keyo: {some_keyo_thing: 5}, 
    {user_id: 1, keyo_id: 32, keyo: {#keyo data} 
    ... 
    ] 
} 

Wie dem auch sei Ausgabe von kw/Keyo Daten zu erhalten fusionierte die Abfrage oben? Ich möchte Ergebnis sein:

[ 
    {user_id: 1, keyo_id: 2, some_keyo_thing: 5, 
    {user_id: 1, keyo_id: 32, , some_keyo_thing: 3 
    ... 
    ] 

Antwort

0

Statt Vorspannung zu verwenden, sind Sie wahrscheinlich besser dran mit einem expliziten gehen verbinden, und dann die Felder auswählen, die Sie

query = from(p in Tree, 
      join: kw in Kw, on: kw.tree_id == p.id, 
      join: k in Keyo, on: k.kw_id == kw.id, 
      where: p.name == ^tree, 
      where: p.user_id == ^user_id, 
      select: %{ user_id: p.user_id, keyo_id: k.id, some_keyo_thing: k.some_keyo_thing } 
     ) 

Repo.all(query) 

Es ist ein wenig mehr zurückgegeben werden sollen Ausführlich, aber gibt Ihnen viel mehr Kontrolle. Ich denke, bei Ihren Modellnamen für kw und keyo, so richtig wie nötig, aber das sollte funktionieren

Verwandte Themen