You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma多对多关联查询如何省略中间表直接返回关联Group数组

方案1:无需修改模型,仅调整查询逻辑

仅需在查询后加一层极轻量的数组映射即可,性能损耗可以忽略不计:

const result = await prisma.permission.findUnique({
  where: { id: id },
  select: {
    id: true,
    name: true,
    groups: {
      select: { group: true }
    }
  }
})

// 扁平化处理得到目标格式
const formattedResult = {
  ...result,
  groups: result.groups.map(item => item.group)
}

方案2:修改Prisma模型配置,一劳永逸无需额外处理

你可以给Permission和Group模型增加逻辑层面的多对多关联,无需修改现有数据库表结构,后续查询可直接拿到目标格式:

第一步:调整模型定义

model Permission {
    @@map(name: "permission")
    id      Int                 @default(autoincrement()) @id
    name    String              @db.VarChar(255)
    // 原中间表关联重命名
    permissionInGroups   PermissionInGroup[]
    // 新增直接关联Group的多对多字段
    groups Group[] @relation("PermissionToGroup", through: PermissionInGroup)
}

model Group {
    @@map(name: "group")
    id              Int                 @default(autoincrement()) @id
    name            String?
    // 原中间表关联重命名
    permissionInGroups     PermissionInGroup[]
    // 新增反向多对多关联
    permissions Permission[] @relation("PermissionToGroup", through: PermissionInGroup)
    users           UserInGroup[]
    domain          Domain              @relation(fields: [domainId], references:[id])
    domainId        Int
}

model PermissionInGroup {
    @@map(name: "permission_in_group")
    id                  Int         @id @default(autoincrement())
    permission          Permission  @relation(fields: [permissionId], references:[id])
    permissionId        Int
    group               Group       @relation(fields: [groupId], references: [id])
    groupId             Int
}

第二步:直接查询即可拿到目标格式

const result = await prisma.permission.findUnique({
  where: { id: id },
  include: {
    groups: {
      select: {
        id: true,
        name: true,
        domainId: true
      }
    }
  }
})

返回结果的groups字段就是你需要的Group对象数组,无需额外处理。


内容的提问来源于stack exchange,提问作者Fejac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:39:01