【问题标题】:Ecto preload and join nested modelsEcto 预加载和连接嵌套模型
【发布时间】:2016-09-09 18:47:14
【问题描述】:

代码如下:

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}
  ...
  ]
}

无论如何要在上面的查询中获得 kw/keyo 数据的合并输出?我希望结果是:

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

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    与其使用预加载,不如使用显式连接,然后选择要返回的字段

    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 的型号名称,所以必要时正确,但这应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2015-07-11
      相关资源
      最近更新 更多