即使数据存在,`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
添加一个字段解析器。我之前已经为posts
和comments
等相关字段做过此操作,我认为这是因为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 也会验证不存在的字段错误