2017-10-08 4 views
1

Ich versuche herauszufinden, wie Argumente für verschachtelte Elemente in meiner Abfrage mit Absinthe verwendet werden.Wie verwende ich Argumente für verschachtelte Elemente in meiner Abfrage mit Absinthe in Elixir?

Was ich versuche, ist, dies zu erreichen:

{ 
    users(order: ASC) { 
    id 
    email 
    clients(order: DESC) { 
     id 
     email 
    } 
    } 
} 

Hier ist mein Schema und Typ:

query do 
    @desc "Get all users" 
    field :users, list_of(:user) do 
     arg :order, type: :sort_order, default_value: :asc 
     resolve &Resolvers.users/2 
    end 
    end 

    @desc "A user" 
    object :user do 
    field :id, :id 
    field :email, :string 
    field :clients, list_of(:user) 
    end 

Und der Resolver:

def users(_, args, _) do 
    args 
    |> Enum.reduce(User, fn 
     {:order, order}, query -> 
     query |> order_by({^order, :email}) 
    end) 
    |> Repo.all |> Repo.preload([:clients]) 
    end 

Also meine Frage ist, wie und wo sollte ich das Sortierargument für die Klienten setzen? Mit dem obigen Beispiel bekomme ich einen Fehler:

"message": "Unknown argument \"order\" on field \"clients\" of type \"User\"." 
+0

Diese [Q & A] (https://stackoverflow.com/questions/34155439/getting-error-unknown-argument-id-on-field-user-of-type-query-graphql?rq=1) könnte Ihnen etwas helfen . –

Antwort

1

das Argument unter dem Feld clients Put:

object :user do 
    field :id, :id 
    field :email, :string 
    field :clients, list_of(:user) do 
    arg :order, type: :sort_order, default_value: :asc 
    resolve &Resolvers.clients/2 
    end 
end 

Dann einen Resolver schreiben die Sortierung zu handhaben:

def clients(user, %{order: clients_order}, _) do 
    sorted_clients = user.clients # TODO sort those clients into the desired order 
    {:ok, sorted_clients} 
end 
Verwandte Themen