Preload all relationships

I have an ERM similar to this:

--------     --------     --------
|ModelA|-----|ModelB|-----|ModelC|
--------     --------     --------

I get ModelA and its ModelBs with the following:

modela = Repo.get(ModelA,1)
modela = preload(modela, :modelb)

Now I can access ModelBusing modela.modelb. But how can I preload ModelC? When I print my model A, it says that modelc is not loaded.

+4
source share
3 answers

I canโ€™t comment, but you must define a nested relationship in ModelA. Cm.Ecto.Schema

has_one :model_c, through: [:model_b, :model_c]

+3
source

Repo.preload . , . , ( ):

query = from m in ModelA, preload: [modelb: :modelc]
Repo.get(query, 1)

Repo.get(ModelA, 1) |> Repo.preload(modelb: :modelc)

{association_name, query} - .

Ecto.Query.preload/3 docs

+10

B, Model C Repo , A C Model Model:

modela = Repo.get(ModelA, 1)
         |> Repo.preload(:modelb)
         |> Repo.preload(modelb: :modelc)
+1

Source: https://habr.com/ru/post/1615892/


All Articles