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
所述
我有一个包含两个 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
所述