即使数据存在,`User` 类型的字段也会为 Query 返回 `null`

Posted

技术标签:

【中文标题】即使数据存在,`User` 类型的字段也会为 Query 返回 `null`【英文标题】:Field on `User` type returns `null` for Query even though data exists 【发布时间】:2019-09-10 10:20:24 【问题描述】:

我的User 类型上有一个profilePicture 字段,即使我可以看到数据库中的数据,该字段也被返回为空。我有以下设置:

// datamodel.prisma

enum ContentType 
  IMAGE
  VIDEO


type Content @embedded 
  type: ContentType! @default(value: IMAGE)
  url: String
  publicId: String


type User 
  id: ID! @id
  name: String
  username: String! @unique
  profilePicture: Content
  website: String
  bio: String
  email: String! @unique
  phoneNumber: Int
  gender: Gender! @default(value: NOTSPECIFIED)
  following: [User!]! @relation(name: "Following", link: INLINE)
  followers: [User!]! @relation(name: "Followers", link: INLINE)
  likes: [Like!]! @relation(name: "UserLikes")
  comments: [Comment!]! @relation(name: "UserComments")
  password: String!
  resetToken: String
  resetTokenExpiry: String
  posts: [Post!]! @relation(name: "Posts")
  verified: Boolean! @default(value: false)
  permissions: [Permission!]! @default(value: USER)
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt


// schema.graphql

type User 
  id: ID!
  name: String!
  username: String!
  profilePicture: Content
  website: String
  bio: String
  email: String!
  phoneNumber: Int
  gender: Gender!
  following: [User!]!
  followers: [User!]!
  verified: Boolean
  posts: [Post!]!
  likes: [Like!]!
  comments: [Comment!]!
  permissions: [Permission!]!

就像我说的数据库中有数据,但是当我在 Playground 中运行以下查询时,我得到 null

// query

  user(id: "5c8e5fb424aa9a000767c6c0") 
    profilePicture 
      url
    
  

// response

  "data": 
    "user": 
      "profilePicture": null
    
  

知道为什么吗?

ctx.prisma.user(( id ), info); 不返回 profilePicture,即使 generated/prisma.graphql 中存在该字段

【问题讨论】:

【参考方案1】:

修复它。我必须在User 下为profilePicture 添加一个字段解析器。我之前已经为postscomments 等相关字段做过此操作,我认为这是因为profilePicture 指向@embedded Content 类型,所以也是一个相关字段。


  User: 
    posts: parent => prisma.user( id: parent.id ).posts(),
    following: parent => prisma.user( id: parent.id ).following(),
    followers: parent => prisma.user( id: parent.id ).followers(),
    likes: parent => prisma.user( id: parent.id ).likes(),
    comments: parent => prisma.user( id: parent.id ).comments(),
    profilePicture: parent => prisma.user( id: parent.id ).profilePicture()
  


【讨论】:

以上是关于即使数据存在,`User` 类型的字段也会为 Query 返回 `null`的主要内容,如果未能解决你的问题,请参考以下文章

即使在输入字段中存在数据之后也会显示警告消息

即使满足条件并且即使目标表和源表中的字段已经存在,雪花合并也会添加数据

即使应用程序关闭,Xamarin 也会为数据同步形成后台服务

即使使用密钥,VeeValidate 也会验证不存在的字段错误

为啥即使指定了所有值,Spark SQL 也会为字符串列打开可为空?

MongoDB,即使它们形成分区,查询字段也会减慢查询速度吗?