如何在类似于SQL like运算符的庄园中使用GraphQL进行查询?
示例:哪些用户的名字以jason?开头?
select * from users where first_name like "jason%"
hel*_*fer 49
简短的回答是:你没有.
更长的答案是你必须自己编写代码.GraphQL不是像SQL这样的数据库查询语言,它是一种应用程序查询语言.这意味着GraphQL不会让您直接编写任意查询.它仅支持GraphQL架构中定义的查询类型.
如果您希望能够编写包含的查询like,则必须这样做
a)在模式中声明,以及b)编写一个获取数据的解析函数
例如,您可以拥有此架构:
type Query {
users(firstName: String!): [User]
}
type User {
firstName: String
lastName: String
}
Run Code Online (Sandbox Code Playgroud)
您必须为该users字段定义以下解析函数:
{
Query: {
users(root, args){
return sql.raw('SELECT * FROM `users` WHERE `firstName` LIKE ?', args.firstName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后编写此查询以获取与您的搜索条件匹配的所有用户的firstName和lastName列表:
{
users(firstName: 'jason%'){
firstName
lastName
}
}
Run Code Online (Sandbox Code Playgroud)
这是我前一段时间写的一篇文章,阐述了GraphQL的一些概念:https://medium.com/apollo-stack/how-do-i-graphql-2fcabfc94a01
这里有一篇文章解释了GraphQL模式和解析函数之间的相互作用:https://medium.com/apollo-stack/graphql-explained-5844742f195e
小智 5
不知道这是否与您相关,因为您希望它以“ 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...
}
}
`;
Run Code Online (Sandbox Code Playgroud)
FWIW:我使用GraphCool BAAS做到了这一点。我不认为您使用的是GraphCool,因为GraphCool不允许在变量名中使用“ _”。
希望这可以帮助某人:)
| 归档时间: |
|
| 查看次数: |
18808 次 |
| 最近记录: |