Amplify Gen 2:如何实现不区分大小写的字符串过滤?
实现GraphQL中不区分大小写的模糊过滤(类似SQL LIKE)
能不能用contains实现不区分大小写的比较,取决于你使用的GraphQL服务端实现:
- 如果是Prisma这类ORM驱动的GraphQL服务:直接支持在
contains里指定不区分大小写的模式。比如:
query GetUsers { users(where: { username: { contains: "alice", mode: insensitive } }) { id username } }
这里的mode: insensitive会自动帮你把字段值和搜索参数统一转成相同大小写后匹配,效果等价于SQL的ILIKE。
- 如果是自定义GraphQL服务(自己写Resolver):可以在Resolver层手动处理大小写统一,比如把前端传入的搜索值转成小写,同时在数据库查询时把目标字段也转成小写后做模糊匹配。以PostgreSQL为例,Resolver里可以生成类似
LOWER(username) LIKE '%' || $1 || '%'的SQL语句,其中$1是转成小写的搜索参数。
如果你的GraphQL服务不支持上述方式,也不用换方向,而是可以:
- 在服务端新增自定义过滤字段,比如
containsInsensitive,专门处理不区分大小写的模糊查询逻辑 - 避免前端硬转大小写后匹配(除非字段本身是大小写无关的),因为这种方式依赖前端处理,容易出问题
内容的提问来源于stack exchange,提问作者Michael Berk
相关产品推荐
相关产品推荐

