有什么方法可以在不显式使用preload的情况下预加载ecto关联?

类似于模式中的选项?

schema "gadgets" do
  field :foo,
  has_many :bars, Myapp.Bar, preload: true
end


我正在做类似的事情

Repo.get(Gadget, id)
  |> Repo.preload: [:bars]


编辑:我要这样做的原因是因为我想将相关模型预加载到已经预加载的相关模型中,例如

 preload: [:invoices preload: :items]

最佳答案

您还可以将预加载作为查询的一部分:

defmodule Gadget do
  use Ecto.Model

  # ...

  def with_invoices(query) do
    from q in query, preload: [invoices: :items]
  end
end


然后:

Gadget
|> Gadget.with_invoices
|> Repo.get!(id)

关于elixir - 默认情况下预加载Ecto关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29595421/

10-10 17:20