Prisma 查询连接点 table

Prisma query junction table

我有一个包含两个 table 的数据库:种族和语言,以及一个交汇点 table races_languages。 这个想法是一个种族可以说多种语言,而一种语言可以被多个种族说。

这是 prisma 为我生成的模式:

model Language {
  id              Int            @id @default(autoincrement())
  name            String         @unique
  races_languages RaceLanguage[]

  @@map("languages")
}

model Race {
  id              Int            @id @default(autoincrement())
  name            String         @unique
  races_languages RaceLanguage[] @relation("racesToraces_languages")

  @@map("races")
}

model RaceLanguage {
  race_id     Int
  language_id Int
  languages   Language @relation(fields: [language_id], references: [id])
  races       Race     @relation("racesToraces_languages", fields: [race_id], references: [id])

  @@id([race_id, language_id])
  @@map("races_languages")
}

到目前为止,我已经设法允许这样的查询工作:

{
  races {
    id
    name
    races_languages {
      languages {
        name
      }
    }
  }
}

我想知道是否有一种方法可以允许从上面看起来像这样的 GraphQL 查询:

{
  races {
    id
    name
    languages {
      name
    }
  }
}

有没有办法将 races_languages 部分展平?如果我想保留 races_languages 中的另一个字段,使其看起来像这样怎么办:

{
  races {
    id
    name
    languages {
      somethingFromRacesLanguages
      name
    }
  }
}

我的解析器如下所示:

  Query: {
    races: (root, args, { db }) =>
      db.race.findMany({
        include: {
          races_languages: { include: { languages: true } },
        },
      }),
  },

遗憾的是,无法将 join/junction table 展平,在您的情况下 RaceLanguage table.

您需要像上面那样通过 include 获取数据,然后在您的应用程序逻辑本身中将其展平。

如果您没有额外的列,您可以使用隐式多对多关系,其中 Prisma 会自动处理连接 table,如 here

所述