You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amplify Flutter 创建多对多关联条目时返回空值,无法写入DynamoDB

解决Amplify GraphQL多对多关联创建失败问题

1. 检查自动生成的UserRoom模型结构

使用@manyToMany注解后,Amplify会自动生成UserRoom连接模型。该模型需要通过外键ID(roomId、userId)关联User和Room,而非直接传入完整的User/Room对象。你可以在项目的lib/models/目录下查看生成的UserRoom.dart,确认是否包含roomId和userId这两个必填字段。

2. 修改创建关联的代码逻辑

将传入完整对象改为传入ID值,同时增加响应错误校验,以便定位问题:

Future<UserRoom?> join(Room room, User user) async {
  try {
    // 使用外键ID创建关联,而非完整对象
    final userRoom = UserRoom(roomId: room.id, userId: user.id);
    final request = ModelMutations.create(userRoom);
    final response = await Amplify.API.mutate(request: request).response;

    // 捕获GraphQL返回的非异常类错误信息
    if (response.hasErrors) {
      safePrint("GraphQL 创建失败错误: ${response.errors.map((e) => e.message).join(', ')}");
      return null;
    }

    return response.data;
  } catch (error) {
    safePrint("创建UserRoom时抛出异常: $error");
  }
  return null;
}

3. 确认UserRoom模型的权限配置

自动生成的UserRoom模型可能未继承User/Room的权限规则,需要检查你的GraphQL schema中UserRoom的@auth配置,确保允许public执行create操作:

type UserRoom @model @auth(rules: [{ allow: public, operations: [create, read], provider: iam }]) {
  id: ID!
  room: Room! @belongsTo
  user: User! @belongsTo
}

如果权限缺失,需要更新schema后重新执行amplify codegen models生成新的模型文件。

4. 调试建议

  • 打开Amplify调试日志:在初始化Amplify时添加Amplify.debugLogEnabled = true;,查看API请求的详细过程
  • 确认传入的room.id和user.id对应的记录已存在于DynamoDB的User、Room表中

内容的提问来源于stack exchange,提问作者J. Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:25:18