Nicemaker
Ecto Nested Preload Filter Referencing Top Level Assoc Join
I have a nested preload with a has_many relation and I would love to filter these references by a join I did on the top level, Here is my naive thinking:
query =
from vm in VariantMarket,as: :vm,
left_join: m in assoc(vm, :market), as: :m,
where: vm.id in ^ids,
preload: [
variant: [product: [market_settings: ^pms_query.()]]
]
and for pms_query I was hoping I could us the dynamic helper like this:
pms_query = fn ->
market_filter = dynamic([pm: pm, m: m], m.id == pm.market_id)
from pm in Pdex.Catalog.ProductMarket,
as: :pm,
where: ^market_filter
end
But I get ann error saying
unknown bind name `:m` in query
As far as I understand this, it’s not possible to reference any top-level joins within a preload. I also tried subqueries with parent_as in the preload part but that was also unsuccessful.
I know I could solve this particular case with a few more joins on the product assoc and then the market_setting assoc, which I could then reference directly in the preload.
But this is just an example to test this kind of filtering. I have a more complex example where multiple joins would be a nightmare.
I get the impression it’s, in general, not possible to simply use a top-level reference as a filter in a preload. Maybe because of the order of interpolation.
But maybe I am just not understanding the dynamic helper at all, and someone could give me a hand, or could at least confirm my assumption.
Thanks in advance
Bjorn
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








