很清楚如何在 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 次 |
最近记录: |