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

Where Next?

Popular in Questions Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
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
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
logicmason
Hi there, I'm working through my first release with elixir/phoenix. I've built a release with distillery and found that it crashes when I...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
gonzofish
I’m currently trying to understand how to join three tables using Ecto. All the examples I’ve seen use 2, so maybe I’m just missing somet...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
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

Other popular topics Top

Tee
can someone please explain to me how Enum.reduce works with maps
New
William
I would like to know that is there any online source for learning Phoenix Framework for building E-Commerce Store? Any advantage on build...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
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

We're in Beta

About us Mission Statement