2016-09-08 5 views
0

に参加するには、コードは次のとおりです。エクトプリロードここで、ネストされたモデルに

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

これは動作しますが、このように、この構造体のデータを返します:とにかく

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

は中キロワット/ keyoデータのマージされた出力を得るために、上記のクエリ?代わりに、プリロードを使用しての

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

答えて

0

あなたはおそらく、明示的に参加して行く方がいいでしょう、そして、あなたがしたいフィールドを選択する

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) 

を返さそれはもう少しだ:私は結果がなりたいです冗長ですが、より多くの制御を提供します。私はあなたのモデル名でkwとkeyoを推測しましたので、必要に応じて修正してくださいが、これはうまくいくはずです

関連する問題