有没有办法预先加载ecto关联而不显式使用preload:?
类似于架构中的选项?
schema "gadgets" do
field :foo,
has_many :bars, Myapp.Bar, preload: true
end
Run Code Online (Sandbox Code Playgroud)
我正在做类似的事情
Repo.get(Gadget, id)
|> Repo.preload: [:bars]
Run Code Online (Sandbox Code Playgroud)
编辑:我试图这样做的原因是因为我想将相关模型预加载到已经预加载的相关模型,如
preload: [:invoices preload: :items]
Run Code Online (Sandbox Code Playgroud)
Jos*_*lim 29
您还可以作为查询的一部分进行预加载:
defmodule Gadget do
use Ecto.Model
# ...
def with_invoices(query) do
from q in query, preload: [invoices: :items]
end
end
Run Code Online (Sandbox Code Playgroud)
然后:
Gadget
|> Gadget.with_invoices
|> Repo.get!(id)
Run Code Online (Sandbox Code Playgroud)