tanweerdev

tanweerdev

Why I am getting same ids/resources returned when try to preload has_many relation

I have this query

#Ecto.Query<from i0 in HaiData.Infection,
 left_join: e1 in assoc(i0, :encounter), left_join: f2 in assoc(i0, :facility),
 left_join: r3 in assoc(i0, :revisions), order_by: [asc: i0.id], limit: ^10,
 offset: ^0, select: map(i0, [:id, :encounter_id, :facility_id]),
 preload: [
  encounter: #Ecto.Query<from e0 in HaiData.Encounter, left_join: p1 in assoc(e0, :patient), limit: ^200, offset: ^0, select: map(e0, [:id, :patient_id]), 
    preload: [patient: #Ecto.Query<from p0 in HaiData.Patient, limit: ^200, offset: ^0, select: map(p0, [:id])>]>, 
  facility: #Ecto.Query<from f0 in HaiData.Facility, limit: ^200, offset: ^0, select: map(f0, [:id, :name])>, 
  revisions: #Ecto.Query<from i0 in HaiData.InfectionRevision, limit: ^200, offset: ^0, select: map(i0, [:revision_id])>
  ]
>

But in return I am getting same resource repeating ie same ids being returned, dont know the reason

[
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1},
     %{encounter_id: 15, facility_id: 2, id: 1}
   ]

Really weird. Dont know if its a bug in ecto or my query. Please help me out debugging issue. Thanks

Marked As Solved

landric

landric

I believe your original question…

same resource repeating ie same ids being returned

…is because you’re both preloading and left_joining the same tables in the same query. It looks like you could delete your joins (leaving your specifically-queried preloads) and stop getting duplicate records.

As for what gets returned, if it were me, I’d just drop the select statement. Preloading will return the associations, and I’d move forward. Perhaps there are business-reasons you strongly prefer to bang your head against nested select syntax to return only 3 fields alongside associations. I wouldn’t choose to bang my head against select syntax when I could just filter out fields in Elixir, but that’s me. :slight_smile:

Also Liked

tanweerdev

tanweerdev

I just created a repository to help identify the issue has_many preload issue.

Please

  • Clone
  • mix deps.get
  • mix ecto.setup
  • mix test

and there is one file has_many_test. Please have a look, it describes the issue

Last Post!

tanweerdev

tanweerdev

You are correct. Atleast removing (left) join from has_many association it worked perfectly. Thanks

Where Next?

Popular in Questions Top

vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
Lily
In templates/appointment/index.html.eex: &lt;%= for appointment &lt;- @appointments do %&gt; &lt;tr&gt; &lt;td&gt;&lt;%= appoi...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New

Other popular topics Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 49084 226
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 42533 114
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement