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

Amplify DataStore执行codegen报Expected scalar and got User如何修复?

错误原因

该报错是因为你在@key、@connection指令的fields参数中传入了关联模型类型的字段名,而非当前模型下实际存在的标量类型字段:@key的fields只接受当前模型的标量字段作为索引依据,@connection的fields也只能填入当前模型中存储外键的标量字段,不能直接使用关联的User/Avatar这类自定义模型类型作为字段值。
代码生成成功是因为旧版本Amplify Codegen的静态校验容错机制,仅抛出错误提示但仍会兜底生成代码,但未修复的情况下后续运行时会出现关联数据查询、写入异常。

修复步骤
  • 为所有存在关联的模型显式定义对应外键的标量字段,用于存储关联目标的索引值
  • 修正所有@key的fields参数,确保填入的值都是当前模型下的标量字段
  • 修正所有@connection的fields参数,填入当前模型下的外键标量字段,Amplify会自动匹配关联模型的对应索引
修复后完整schema代码
type User
  @model
  @key(name: "ByEmail", fields: ["email"], queryField: "userByEmail")
  @auth(rules: [{ allow: owner }]) {
  id: ID!
  email: String!
  gender: String!
  birthdate: String!
  faceImage: String
  avatarId: String # 新增:存储关联Avatar的avatarId值
  favoriteAvatar: [Avatar] @connection(fields: ["avatarId"])
  totalVideoTransform: Int
  registerAt: AWSDateTime!
}

type Avatar
  @model
  # 修正原拼写错误ByAvatrId为ByAvatarId
  @key(name: "ByAvatarId", fields: ["avatarId"], queryField: "avatarByAvatarId")
  @auth(rules: [{ allow: owner, ownerField: "favoriteUser", operations: [create, update, read] }]) {
  id: ID!
  avatarId: String!
  gender: String!
  userEmail: String # 新增:存储关联User的email值
  favoriteUser: [User] @connection(fields: ["userEmail"])
  totalVideoTransform: Int
}

type UserLoginLog
  @model
  # 修正fields为实际存在的外键标量字段
  @key(name: "ByUser", fields: ["userEmail"], queryField: "userLoginLogByUser")
  @auth(rules: [{ allow: owner, operations: [create] }]) {
  id: ID!
  userEmail: String! # 新增:存储关联User的email值
  user: User @connection(fields: ["userEmail"])
  loginAt: AWSDateTime!
}

type VideoTransformLog
  @model
  # 修正fields为实际存在的外键标量字段
  @key(name: "ByUser", fields: ["userEmail"], queryField: "videoTransformLogByUser")
  @auth(rules: [{ allow: owner, operations: [create] }]) {
  id: ID!
  userEmail: String! # 新增:存储关联User的email值
  user: User @connection(fields: ["userEmail"])
  logAvatarId: String! # 新增:存储关联Avatar的avatarId值
  avatar: Avatar @connection(fields: ["logAvatarId"])
  videoTransformAt: AWSDateTime!
}

修改完成后重新执行amplify codegen models即可消除报错。

内容的提问来源于stack exchange,提问作者gs97ahn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:04