28 votes

Graphql - Comment exécuter la clause where

Je suis novice en graphql et j'ai du mal avec une requête. Je veux retourner un utilisateur par son adresse email.

J'ai défini un type appelé V1User qui comporte les champs suivants id, email, mot de passe, rôle

Que faut-il modifier dans cette requête pour renvoyer un utilisateur sur la base de son adresse électronique ?

    query GetAllV1User {
  viewer {
     allV1Users{
      edges {
        node {
          id
          email
          role
          createdAt
          modifiedAt
        }
      }
    }
  }
}

J'ai essayé cette requête

    query getV1UserQuery($email: String!) {
  getV1User(email: $email) {
    id
    email
  }
}

Avec ces paramètres

{"email": "test@test.com"}

Mais les erreurs suivantes apparaissent

    {
  "errors": [
    {
      "message": "Unknown argument \"email\" on field \"getV1User\" of type \"Query\".",
      "locations": [
        {
          "line": 2,
          "column": 13
        }
      ],
      "name": "GraphQLError"
    },
    {
      "message": "Field \"getV1User\" argument \"id\" of type \"ID!\" is required but not provided.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "name": "GraphQLError"
    }
  ]
}

Mon schéma est le suivant

Name        Type        Constraints 
id          ID          NonNull Unique  
modifiedAt  DateTime    NonNull 
createdAt   DateTime    NonNull 
role        String      NonNull 
password    String      NonNull 
email       String      NonNull Unique Indexed  

T

Bonjour

Cette requête a résolu mon problème

query getUserForEmailAddressAndPassword($where: V1UserWhereArgs) {
  viewer {
    allV1Users(where: $where) {
      edges {
        node {
          email
          id
          createdAt
          password
          modifiedAt
          role
        }        
      }
    }
  }
}

Avec ces variables d'interrogation

{"where": {"email": {"eq" : "test@test.com"}, "password": {"eq":"te2st"}}}

3voto

Aaron Dsouza Points 21

Je vous déconseille d'utiliser la chaîne "where" dans votre clause de filtrage. N'essayez pas d'imiter SQL. Qu'essayez-vous de filtrer à l'aide de la clause where ? S'il s'agit d'une adresse électronique, la requête de votre schéma doit contenir user comme champ et email comme paramètre de ce champ. Le premier exemple que vous avez envoyé est donc la bonne façon de procéder. Par ailleurs, évitez de déclarer des requêtes en utilisant des verbes tels que getUsers ou getUser. Le schéma doit simplement déclarer la requête en utilisant des noms

Query
{
   Users(email:String):[User!]
}

type User 
{
    id
    email
    createdAt
    otherStuff
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X