我想预加载所有类别子类别。
示例:
-> Sport
-> Football
-> Man
-> Woman
-> Handbal
-> Man
-> Woman
到目前为止,我设法只预装了第一个孩子,这是我正在使用的代码:
schema "categories" do
has_many :subCategories, Category, foreign_key: :parent_id
------
Repo.all from category in Category,
left_join: subCategories in assoc(category, :subCategories),
preload: [subCategories: subCategories],
where: is_nil(category.parent_id)
我找到了一种如何加载所有子类别的方法,但它会产生太多的SQL查询(http://tensiondriven.github.io/posts/recursively-load-self-referential-association-using-ecto)
答案 0 :(得分:1)
这就是我以前用来预加载类别和子类别的方法。 希望有所帮助
Repo.preload([:category1, :category2,
category3: [subcategory1: [subcat1: :subcat2]]])
但是我建议在SQL中使用连接,因为preload会为每个关联分配数据库。加入只需一次db旅行即可。