【问题标题】:How to implement a social media "following feed" query using Prisma 2?如何使用 Prisma 2 实现社交媒体“关注提要”查询?
【发布时间】:2020-11-07 20:24:35
【问题描述】:

我有一个与编写“社交媒体”样式提要查询有关的问题,但在这种情况下,我使用的是 Prisma 2。我有一个音乐应用程序,我想在其中显示来自所有 Albums 的提要Artists 后面跟着 User

在我的schema.prisma 中,我有以下型号:

用户

model User {
  id         Int      @id @default(autoincrement())
  email      String   @unique
  following  Artist[]
}

艺术家

model Artist {
  id        Int     @id @default(autoincrement())
  name      String
  followers User[]
  albums    Album[]
}

Prisma 创建一个名为 UserToArtist 的隐式连接表来跟踪 User 何时跟随 Artist

专辑

model Album {
  id          Int      @id @default(autoincrement())
  title       String
  date        DateTime <-- this is an ISO date string
  artists     Artist[] <-- an album can have several artists
}

Prisma 创建一个名为 ArtistToAlbum 的隐式连接表来跟踪哪些 Artists 与某些 Albums 关联。


那么我如何创建一个 Prisma 查询来查找用户按照Album 日期排序的所有艺术家专辑?这是我的第一次尝试,但这似乎不正确,并且专辑没有按日期排序:

const results = await ctx.db.album.findMany({
  where: {
    date: {
      gt: moment().startOf('day').toISOString()
    },
    artists: {
      some: {
        followers: {
          some: {
            id: args.userId, <-- the userId for the feed
          },
        },
      },
    },
  },
  orderBy: {
    date: 'asc',
  },
})

注意我必须如何过滤两个some 语句?只是感觉不对...对于这样的查询,您有什么建议?谢谢!

【问题讨论】:

    标签: javascript prisma prisma2


    【解决方案1】:

    您可以使用 fluent API 来抓取用户关注的所有艺术家,它应该看起来像这样:

    const followedArtists = await ctx.db.user.findOne({ where: { id: args.userId, } }).following()
    

    您可以从这里获取所有这些艺术家的专辑,然后在您的服务器代码中对它们进行排序,然后作为查询结果发回

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2020-08-14
      相关资源
      最近更新 更多