web-dev-qa-db-ja.com

GraphQLで文字列値を検索する方法

SQLのlike演算子に似たマナーでGraphQLを使用してどのようにクエリしますか?

例:jasonで始まる名を持つユーザーは何ですか?

select * from users where first_name like "jason%"

30
Jason

簡単な答えは、そうではありません。

長い答えは、そのコードを自分で書く必要があるということです。 GraphQLは、SQLのようなデータベースクエリ言語ではなく、アプリケーションクエリ言語です。つまり、GraphQLでは、すぐに任意のクエリを記述できません。 GraphQLスキーマで定義されたクエリのタイプのみをサポートします。

likeを含むクエリを記述できるようにするには、

a)スキーマで宣言し、b)データを取得する解決関数を作成します

たとえば、次のスキーマを使用できます。

type Query {
  users(firstName: String!): [User]
}

type User {
  firstName: String
  lastName: String
}

usersフィールドに次の解決関数を定義する必要があります。

{
  Query: {
    users(root, args){
      return sql.raw('SELECT * FROM `users` WHERE `firstName` LIKE ?', args.firstName);
    }
  }
}

最後に、このクエリを作成して、検索条件に一致するすべてのユーザーのfirstNameとlastNameのリストを取得します。

{
  users(firstName: 'jason%'){
    firstName
    lastName
  }
} 

GraphQLの周りの概念のいくつかを明確にする私が少し前に書いた投稿は次のとおりです: https://medium.com/apollo-stack/how-do-i-graphql-2fcabfc94a01

そして、ここにGraphQLスキーマと解決関数間の相互作用を説明する投稿があります: https://medium.com/apollo-stack/graphql-explained-5844742f195e

46
helfer

「jason」で始まる(つまり、「jason bourne」は返されるが「bourne jason」は返されない)ため、これがあなたに関連するかどうかはわかりませんが、最近、「%Like%」でGraphQLを照会する方法に出会いましたマナー。ユースケースでは、次のようになります。

export const allUsersQuery = `
  query allUsers($UserName: String!){
    allUsers(
      filter: {first_name_contains: $UserName}
    ) {
      id
      first_name
      ...INSERT_OTHER_FIELDS_HERE...
    }
  }
`;

FWIW:GraphCool BAASを使用してこれを行いました。 GraphCoolでは変数名に「_」を使用できないため、GraphCoolを使用しているとは思わない。

これが誰かの助けになることを願っています:)

5
Mark Miller