SQLのlike
演算子に似たマナーでGraphQLを使用してどのようにクエリしますか?
例:jason
で始まる名を持つユーザーは何ですか?
select * from users where first_name like "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
「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を使用しているとは思わない。
これが誰かの助けになることを願っています:)