如何在类似于SQL的like
运算符的庄园中使用GraphQL进行查询?
示例:哪些用户的名字以jason
开头?
select * from users where first_name like "jason%"
答案 0 :(得分:45)
简短的回答是:你没有。
答案越长,你必须自己编写代码。 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
答案 1 :(得分:5)
不确定这是否与您相关,因为您希望它以" jason"开头。 (即将返回" jason bourne"但不会" bourne jason")但我最近遇到了一种方式来查询和#34;%Like%"方式。对于您的用例,它看起来像这样:
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不允许" _"变量名。
希望这可以帮助某些人:)