如何使用Prisma和GraphQL制作对象类型的自解析数组

如何使用Prisma和GraphQL制作对象类型的自解析数组,graphql,prisma,Graphql,Prisma,也许标题不准确,但我真的不知道如何描述它了。我看了很多文档和描述,但还是搞不懂 我想在我的类型用户上实现一个基本的社交媒体,比如followers/following查询。我正在使用MySQL,为此我创建了一个单独的表,名为Follow,因为它是一个多对多连接 以下是数据库中my表的伪ish表示,没有不必要的列: Table - User user_id primary key Int Table - Follow follow_er foreign_key -> User(us

也许标题不准确,但我真的不知道如何描述它了。我看了很多文档和描述,但还是搞不懂

我想在我的类型用户上实现一个基本的社交媒体,比如followers/following查询。我正在使用MySQL,为此我创建了一个单独的表,名为Follow,因为它是一个多对多连接

以下是数据库中my表的伪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
用户可以“扮演”跟随者的角色,这样我就可以得到跟随者

一个用户可以被跟踪,这样我就可以得到追随者

我的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")
}
通过实现此功能,我可以将追随者和以下对象附加到用户的根查询:

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}的对象数组,我也无法使它工作:

[
    {
        follow_er:1,
        follow_ed:2
    },
    {
        follow_er:1,
        follow_ed:3
    },
    {
        follow_er:3,
        follow_ed:1
    },
]
我无法遍历数组。据我所知,我必须传递follow\u er或follow\u ed,这是获取用户对象的用户id


我错过了什么?也许我试图从一个错误的方向解决它。如果有人能帮我解决这个问题,或者告诉我一些我必须寻找的关键词或概念,那就太酷了。谢谢

我建议按照以下格式为该结构创建自我关系:

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 },
})
所以你会得到这样的回答:

谢谢您的回复!正如我写的那样,我设法获得了follow关系的对象数组,这些是follow表中的行。我认为一定有一个特殊的函数或者我缺少的东西,但是我通过使用一个简单的forEach循环遍历数组,然后使用.findUnique方法,成功地做到了这一点。