AWS Amplify React Native中GraphQL无法查询子对象问题求助
解决AWS Amplify中Datasheet关联Point数据查询失败的问题
1. 修正GraphQL Schema的关联定义
@hasMany和@belongsTo是双向绑定的,必须同时配置才能让Amplify正确识别关联关系。你的Point类型缺少反向关联,需要补充配置:
type Point @model { id: ID! @primaryKey points: Int! models: String! datasheet: Datasheet @belongsTo(fields: ["datasheetId"]) datasheetId: ID # 与现有Point数据中的"datasheet"字段对应,若不想改数据可将字段名改为"datasheet" } type Datasheet @model { id: ID! @primaryKey name: String! points: [Point] @hasMany(indexName: "byDatasheet", fields: ["id"]) }
2. 更新Amplify后端
修改Schema后,运行命令重新生成并部署API:
amplify push
若提示覆盖现有配置,选择确认即可。
3. 自定义查询语句获取关联数据
默认生成的listDatasheets不会自动返回嵌套的Point数据,需要手动编写包含关联字段的查询:
import { API, graphqlOperation } from 'aws-amplify'; import { gql } from '@apollo/client'; // 自定义带关联字段的查询 const LIST_DATASHEETS_WITH_POINTS = gql` query ListDatasheets { listDatasheets { items { id name points { items { id points models } } } } } `; // 执行查询 const fetchDatasheets = async () => { console.log('GET datasheets'); const sheetData = await API.graphql(graphqlOperation(LIST_DATASHEETS_WITH_POINTS)); const sheets = sheetData.data.listDatasheets.items; console.log(sheets[0].points.items); console.log(sheets); setSheets(sheets); };
4. 验证数据关联
确认Point数据中的关联字段(datasheet或datasheetId)确实指向存在的Datasheet ID,确保数据间的关联关系正确。
内容的提问来源于stack exchange,提问作者Richard Smith
相关产品推荐
相关产品推荐

