如何使用Amplify GraphQL实现User、Post、Comment多对多关联条件查询
Amplify GraphQL 实现多表关联过滤查询方案
首先你需要先正确配置3张表的关联Schema,通过Amplify提供的装饰器定义模型关系,之后即可通过嵌套过滤实现对应SQL逻辑的查询。
第一步:编写GraphQL Schema定义
在你的Amplify项目的schema.graphql文件中添加如下模型定义,自动关联三张表的外键关系:
type User @model { id: ID! # 其余用户自定义字段 gender: String! comments: [Comment] @hasMany } type Post @model { id: ID! # 其余帖子自定义字段 title: String! comments: [Comment] @hasMany } type Comment @model { id: ID! # 其余评论自定义字段 user: User! @belongsTo post: Post! @belongsTo }
编写完成后执行amplify push命令部署Schema,Amplify会自动生成对应的表结构、关联外键以及基础CRUD查询接口。
第二步:编写嵌套过滤查询语句
你可以直接使用Amplify自动生成的listComments接口,通过嵌套过滤规则实现你的SQL对应的查询逻辑:
query FilterComments($searchWord: String!) { listComments( filter: { and: [ # 过滤关联用户的性别为男性 { user: { gender: { eq: "MALE" } } }, # 过滤关联帖子标题包含指定关键词 { post: { title: { contains: $searchWord } } } ] } ) { items { # 你需要返回的评论字段 id content # 关联返回的用户信息 user { id name gender } # 关联返回的帖子信息 post { id title content } } } }
调用查询时传入$searchWord参数为你要匹配的关键词即可。
注意事项
- 如果你使用的Amplify CLI版本低于6.x,需要先手动开启嵌套过滤配置:在项目的
amplify/cli.json文件中添加配置项"transformerOptions": { "enableNestedFilters": true },之后重新执行amplify push生效。 - 若你的数据量较大,模糊查询性能无法满足需求,可以给
Post模型添加@searchable装饰器,将数据同步到OpenSearch实现更高效的全文检索。
内容的提问来源于stack exchange,提问作者Nguyễn Trần
相关产品推荐
相关产品推荐

