如何使用 Prisma 和 GraphQL 创建 object 类型的自解析数组
How to make self resolving array of object types with Prisma and GraphQL
也许标题不准确,但我真的不知道该怎么形容了。我浏览了多个文档和描述,但仍然无法弄明白。
我想在我的用户类型上实现 followers/following 查询之类的基本社交媒体。我正在使用 MySQL,为此我创建了一个名为 Follow 的单独 table,因为它是一个 many-to-many 连接。
这是我的 table 在数据库中的 pseudo-ish 表示,没有不必要的列:
Table - User
user_id primary key Int
Table - Follow
follow_er foreign_key -> User(user_id) Int
follow_ed foreign_key -> User(user_id) Int
用户可以“充当”follow_er 这样我就可以获得关注的人
一个用户可以是 follow_ed,所以我可以获得关注者。
我的 Prisma 架构如下所示:
model User {
user_id Int @id @default(autoincrement())
following Follow[] @relation("follower")
followed Follow[] @relation("followed")
}
model Follow {
follow_er Int
follower User @relation("follower", fields: [follow_er], references: [user_id])
follow_ed Int
followed User @relation("followed", fields: [follow_ed], references: [user_id])
@@id([follow_er, follow_ed])
@@map("follow")
}
通过执行此操作,我可以获得关注者并关注 object 附加到用户的根查询:
const resolvers = {
Query: {
user: async (parent, arg, ctx) => {
const data = await ctx.user.findUnique({
where: {
user_id: arg.id
},
include: {
following: true,
followed:true
}
})
return data
}....
这是我尝试创建的 GraphQL 模式:
type Query{
user(id: Int!): User
}
type User{
id: ID
following: [User]
followed: [User]
}
所以我可以得到类似的东西:
query {
user(id: $id) {
id
following {
id
}
followed{
id
}
}
}
}
但是我无法让它工作,因为即使我得到了 {follow-connections} 的 object 数组:
[
{
follow_er:1,
follow_ed:2
},
{
follow_er:1,
follow_ed:3
},
{
follow_er:3,
follow_ed:1
},
]
我无法遍历数组。据我所知,我必须通过 follow_er 或 follow_ed,这是一个 user_id 以获得用户 object.
我错过了什么?也许我试图从错误的方向解决它。如果有人可以帮助我解决这个问题,或者只是告诉我一些我必须寻找的关键字或概念,那就太好了。谢谢!
我建议按以下格式为此结构创建自关系:
model User {
id Int @id @default(autoincrement())
name String?
followedBy User[] @relation("UserFollows", references: [id])
following User[] @relation("UserFollows", references: [id])
}
然后查询如下:
await prisma.user.findUnique({
where: { id: 1 },
include: { followedBy: true, following: true },
})
所以你会得到这样的回复:
也许标题不准确,但我真的不知道该怎么形容了。我浏览了多个文档和描述,但仍然无法弄明白。
我想在我的用户类型上实现 followers/following 查询之类的基本社交媒体。我正在使用 MySQL,为此我创建了一个名为 Follow 的单独 table,因为它是一个 many-to-many 连接。
这是我的 table 在数据库中的 pseudo-ish 表示,没有不必要的列:
Table - User
user_id primary key Int
Table - Follow
follow_er foreign_key -> User(user_id) Int
follow_ed foreign_key -> User(user_id) Int
用户可以“充当”follow_er 这样我就可以获得关注的人
一个用户可以是 follow_ed,所以我可以获得关注者。
我的 Prisma 架构如下所示:
model User {
user_id Int @id @default(autoincrement())
following Follow[] @relation("follower")
followed Follow[] @relation("followed")
}
model Follow {
follow_er Int
follower User @relation("follower", fields: [follow_er], references: [user_id])
follow_ed Int
followed User @relation("followed", fields: [follow_ed], references: [user_id])
@@id([follow_er, follow_ed])
@@map("follow")
}
通过执行此操作,我可以获得关注者并关注 object 附加到用户的根查询:
const resolvers = {
Query: {
user: async (parent, arg, ctx) => {
const data = await ctx.user.findUnique({
where: {
user_id: arg.id
},
include: {
following: true,
followed:true
}
})
return data
}....
这是我尝试创建的 GraphQL 模式:
type Query{
user(id: Int!): User
}
type User{
id: ID
following: [User]
followed: [User]
}
所以我可以得到类似的东西:
query {
user(id: $id) {
id
following {
id
}
followed{
id
}
}
}
}
但是我无法让它工作,因为即使我得到了 {follow-connections} 的 object 数组:
[
{
follow_er:1,
follow_ed:2
},
{
follow_er:1,
follow_ed:3
},
{
follow_er:3,
follow_ed:1
},
]
我无法遍历数组。据我所知,我必须通过 follow_er 或 follow_ed,这是一个 user_id 以获得用户 object.
我错过了什么?也许我试图从错误的方向解决它。如果有人可以帮助我解决这个问题,或者只是告诉我一些我必须寻找的关键字或概念,那就太好了。谢谢!
我建议按以下格式为此结构创建自关系:
model User {
id Int @id @default(autoincrement())
name String?
followedBy User[] @relation("UserFollows", references: [id])
following User[] @relation("UserFollows", references: [id])
}
然后查询如下:
await prisma.user.findUnique({
where: { id: 1 },
include: { followedBy: true, following: true },
})
所以你会得到这样的回复: