Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm 如何在prisma中搜索M到N关系?_Orm_Prisma_Prisma Graphql_Nexus Prisma_Prisma2 - Fatal编程技术网

Orm 如何在prisma中搜索M到N关系?

Orm 如何在prisma中搜索M到N关系?,orm,prisma,prisma-graphql,nexus-prisma,prisma2,Orm,Prisma,Prisma Graphql,Nexus Prisma,Prisma2,我现在和普里斯玛一起做这个项目。 我设计了m-to-n关系表。下面是我的代码。 schema.prisma model Artists { id Int @id @default(autoincrement()) artistName String? Albums Albums[] Artists_Tracks Artists_Tracks[] } model Ar

我现在和普里斯玛一起做这个项目。 我设计了m-to-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")
}
这是我的prisma代码。我想做的是按trackname搜索,并用艺术家的名字获取所有曲目的信息

+(编辑) 我试过的是

// 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获得每首曲目的艺术家名称。有没有办法在一次一次的查询中做到这一点?我很肯定会有更好的方法来做到这一点。提前感谢。

根据您的模式,
包含
将不包含
艺术家
关系。它必须包含在
Artists\u Tracks
关系中,如下所示:

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

通过这种方式,您可以为每首曲目获得
艺术家

我尝试过这种方式,但出现了错误:/所以我想有没有什么特殊的方法可以反向操作。include允许我们从多个连接到一个,但不是从一个连接到多个,不是吗?你犯了什么错误?我按照你说的解决了问题:/这是因为我的一个队友更改了DBschema,没有让我们知道。它工作得很好。非常感谢你。