Ecto.Repo.preload
You're seeing just the callback
preload
, go back to Ecto.Repo module for more information.
Specs
preload(structs_or_struct_or_nil, preloads :: term(), opts :: Keyword.t()) :: structs_or_struct_or_nil when structs_or_struct_or_nil: [Ecto.Schema.t()] | Ecto.Schema.t() | nil
Preloads all associations on the given struct or structs.
This is similar to Ecto.Query.preload/3
except it allows
you to preload structs after they have been fetched from the
database.
In case the association was already loaded, preload won't attempt to reload it.
Options
:force
- By default, Ecto won't preload associations that are already loaded. By setting this option to true, any existing association will be discarded and reloaded.:in_parallel
- If the preloads must be done in parallel. It can only be performed when we have more than one preload and the repository is not in a transaction. Defaults totrue
.:prefix
- the prefix to fetch preloads from. By default, queries will use the same prefix as the one in the given collection. This option allows the prefix to be changed.
See the "Shared options" section at the module documentation for more options.
Examples
# Use a single atom to preload an association
posts = Repo.preload posts, :comments
# Use a list of atoms to preload multiple associations
posts = Repo.preload posts, [:comments, :authors]
# Use a keyword list to preload nested associations as well
posts = Repo.preload posts, [comments: [:replies, :likes], authors: []]
# Use a keyword list to customize how associations are queried
posts = Repo.preload posts, [comments: from(c in Comment, order_by: c.published_at)]
# Use a two-element tuple for a custom query and nested association definition
query = from c in Comment, order_by: c.published_at
posts = Repo.preload posts, [comments: {query, [:replies, :likes]}]
The query given to preload may also preload its own associations.