【问题标题】:Prisma query junction tablePrisma 查询联结表
【发布时间】:2021-03-20 22:02:18
【问题描述】:

我有一个包含两个表的数据库:races 和languages,以及一个连接表races_languages。 这个想法是一个种族可以说多种语言,一种语言可以被多个种族说。

这是为我生成的架构棱镜:

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 } },
        },
      }),
  },

【问题讨论】:

    标签: postgresql prisma


    【解决方案1】:

    不幸的是,没有办法展平连接/联结表,在您的情况下是 RaceLanguage 表。

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

    如果您没有额外的列,则可以使用隐式多对多关系,其中 Prisma 自动处理联结表,如 here 所述

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 2021-04-04
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多