在Ecto中预加载深层嵌套的关联

时间:2019-02-20 22:32:30

标签: elixir ecto

很明显,如何在ecto 1-2级中预先加载关联,例如对它的发布和评论。

我有一个Address,并且Address 属于一个Street,还有Street 属于一个{{ 1}}和City 属于地区,以及City 属于一个Region

给出Country

Address

如何将其始终预加载到addr = Repo.get(Address, 123) |> Repo.preload(street: ?????)

Country

1 个答案:

答案 0 :(得分:3)

根据the docs Repo.preload/3Ecto.Query.preload/3类似,您可以将嵌套的预加载列表传递给它们两个。

示例:

使用Repo.preload/3

addr = 
  Address
  |> Repo.get(123)
  |> Repo.preload(street: [city: [region: :country]])

IO.inspect(addr.street.city.region.country)

使用Ecto.Query.preload/3

addr = 
  Address
  |> Ecto.Query.where(id: 123)
  |> Ecto.Query.preload(street: [city: [region: :country]])
  |> Repo.one()

IO.inspect(addr.street.city.region.country)