很清楚如何在 Ecto 1-2 层深预加载关联,例如发布和评论。
我有一个Address和Address belongs_to的一个Street,和 Street belongs_to的一个City,和City belongs_to的地区,并Region belong_to一Country
鉴于Address:
addr = Repo.get(Address, 123)
|> Repo.preload(street: ?????)
Run Code Online (Sandbox Code Playgroud)
我如何预加载到Country:
IO.puts("the name of country: #{addr.street.city.region.country.name}")
Run Code Online (Sandbox Code Playgroud)
?
根据文档 Repo.preload/3类似于Ecto.Query.preload/3,您可以将嵌套的预加载列表传递给它们。
Repo.preload/3:addr =
Address
|> Repo.get(123)
|> Repo.preload(street: [city: [region: :country]])
IO.inspect(addr.street.city.region.country)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |