【问题标题】:How to search M to N relationship in prisma?如何在棱镜中搜索 M 到 N 的关系?
【发布时间】:2021-03-19 18:38:03
【问题描述】:

我现在正在使用 prisma 进行项目。 我设计了 m 对 n 关系表。下面是我的代码。 schema.prisma

model Artists {
  id                 Int                  @id @default(autoincrement())
  artistName         String?
  Albums             Albums[]
  Artists_Tracks     Artists_Tracks[]
}

model Artists_Tracks {
  id       Int      @id @default(autoincrement())
  trackId  Int?
  artistId Int?
  Artists  Artists? @relation(fields: [artistId], references: [id])
  Tracks   Tracks?  @relation(fields: [trackId], references: [id])

  @@index([artistId], name: "Artists_Tracks_artistId_foreign_idx")
  @@index([trackId], name: "Artists_Tracks_trackId_foreign_idx")
}

model Tracks {
  id                Int                 @id @default(autoincrement())
  trackName         String?
  albumTrackNumber  Int?
  albumId           Int?
  Albums            Albums?             @relation(fields: [albumId], references: [id])
  Artists_Tracks    Artists_Tracks[]

  @@index([albumId], name: "Tracks_albumId_foreign_idx")
}

这是我的棱镜代码。我想要做的是按曲目名称搜索并使用艺术家姓名获取所有曲目的信息。

+编辑) 我试过的是

// first try
optObj.include = {
    Albums: {
      select: { cover: true },
    },
    Artists_Tracks: {
       Albums: true
    },
 };

// second try
optObj.include = {
    Albums: {
      select: { cover: true },
    },
    Artists_Tracks: true,
    Artists: true,
  };


  const result = await prisma.tracks.findMany(optObj);

并使用 promise.all 获取每首曲目的艺术家姓名。有没有办法通过一个查询一次做到这一点?我很确定会有更好的方法来做到这一点。提前谢谢你。

【问题讨论】:

    标签: orm prisma prisma-graphql nexus-prisma prisma2


    【解决方案1】:

    根据您的架构,include 将不包含Artist 关系。它必须包含在Artists_Tracks 关系中,如下所示:

    const result = await prisma.tracks.findMany({
        include: {
          Albums: {
            select: { cover: true },
          },
          Artists_Tracks: { include: { Artists: true } },
        },
    })
    

    通过这种方式,您可以获得每个当前曲目的Artist

    【讨论】:

    • 我试过这个但我得到了错误:/所以我想有什么特殊的方法可以反过来做。 include 允许我们连接多对一,但不是一对多,不是吗?
    • 我按照你的说法解决了这个问题:/ 这是因为我的一位队友更改了 DBschema 并且没有让我们知道它。它工作完美。非常感谢。
    猜你喜欢
    • 2022-01-01
    • 2020-09-10
    • 2022-01-19
    • 1970-01-01
    • 2019-10-05
    • 2011-02-07
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多