Billzabob
Using Absinthe Dataloader for top level queries
I’m trying to figure out how to use Dataloader with absinthe for a top level query. I have it working just fine for a field on an object, like so:
defmodule UserSchema do
use Absinthe.Schema.Notation
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Core.Loaders.CardLoader
object :user do
field(:cards, list_of(:card), resolve: dataloader(CardLoader))
end
end
However, I’d like to also be able to use Dataloader for top level queries like so:
query do
field(:cards, list_of(:card), resolve: dataloader(CardLoader))
end
But this fails with this error:
** (Dataloader.GetError) The given atom - :cards - is not a module.
This can happen if you intend to pass an Ecto struct in your call to
`dataloader/4` but pass something other than a struct.
How can I achieve this? I could obviously do it another way, by having the resolver function call Repo.all(Card) but I’d love to be able to do it all with Dataloader. Is that possible?
Most Liked
Billzabob
I ended up getting this working with the following:
import Absinthe.Resolution.Helpers, only: [on_load: 2]
query do
field :users, list_of(:user) do
arg(:ids, non_null(list_of(:id)))
resolve(fn %{ids: ids}, %{context: %{loader: loader}} ->
loader
|> Dataloader.load_many(UserLoader, User, ids)
|> on_load(fn loader ->
users = Dataloader.get_many(loader, UserLoader, User, ids)
{:ok, users}
end)
end)
end
end
6
Popular in Questions
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
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
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
I would like to know what is the best IDE for elixir development?
New
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
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
Hey all,
I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
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
Other popular topics
Hello, I get Persian date from my client and convert it to normal calendar like this:
def jalali_string_to_miladi_english_number(persi...
New
In Ruby, I can go:
User.find_by(email: "foobar@email.com").update(email: "hello@email.com")
How can I do something similar in Elixir? ...
New
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
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
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
As many of you may have realized by now (sorry for all the posts here) I’ve been working on a db problem where I’m trying to aggregate a ...
New
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum.
...
New
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
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New







