【发布时间】:2016-10-25 04:14:40
【问题描述】:
如何在类似于 SQL 的like 运算符的庄园中使用 GraphQL 进行查询?
示例:哪些用户的名字以jason 开头?
select * from users where first_name like "jason%"
【问题讨论】:
标签: graphql
如何在类似于 SQL 的like 运算符的庄园中使用 GraphQL 进行查询?
示例:哪些用户的名字以jason 开头?
select * from users where first_name like "jason%"
【问题讨论】:
标签: graphql
不确定这是否与您相关,因为您希望它以“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 不允许在变量名中使用“_”。
希望这可以帮助某人:)
【讨论】:
简短的回答是:你不知道。
更长的答案是您必须自己编写该代码。 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);
}
}
}
最后编写此查询以获取与您的搜索条件匹配的所有用户的名字和姓氏的列表:
{
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
【讨论】:
users(firstName: String): [User] 在String 后面不带感叹号可用于使firstName 可选。然后你可以对你的服务器进行编程,让users返回所有用户,而users(firstName: "Max")只返回名字为Max的用户。