Как искать значения строк в GraphQL

Как вы запрашиваете использование GraphQL в усадьбе, подобной оператору SQL like?

Пример: у кого есть имя, начинающееся с jason?

select * from users where first_name like "jason%"

Ответы

Ответ 1

Короткий ответ: вы этого не делаете.

Более длинный ответ заключается в том, что вы должны сами написать этот код. GraphQL не является языком запросов к базе данных, например SQL, это язык запросов приложения. Это означает, что GraphQL не позволит вам писать произвольные запросы из коробки. Он будет поддерживать только типы запросов, определенных в вашей схеме GraphQL.

Если вы хотите написать запрос, содержащий like, вы должны

a) объявить, что в схеме и б) написать функцию разрешения, которая извлекает данные

Например, у вас может быть эта схема:

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

Ответ 2

Не уверен, что это относится к вам, потому что вы хотите, чтобы он начинался с "jason" (т.е. возвращал "jason bourne", но не "bourne jason" ), но недавно я нашел способ запросить 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 не допускает "_" в именах переменных.

Надеюсь, это поможет кому-то по линии:)