如何在 Prisma 中选择列和_计数

问题描述 投票:0回答:1

当将 TypeScript 与 Prisma 以及我在下面定义的模型一起使用时,我发现这是有效的,并向我返回所有数据,包括 emailAccount 中的所有列。

    const emailAccounts = await prisma.emailAccount.findMany({
      include: {
        _count: {
          select: { folders: true, emailRules: true, RulesProcessedHistory: true },
        },
      },
    });

但是,当我只包含 id 列的选择时,我收到此打字稿错误:

TS2353: Object literal may only specify known properties, and id does not exist in type EmailAccountInclude<DefaultArgs

    const emailAccounts = await prisma.emailAccount.findMany({
      include: {
        id: true,
        _count: {
          select: { folders: true, emailRules: true, RulesProcessedHistory: true },
        },
      },
    });

我相信我直接按照文档中的示例进行操作。

为什么我会收到此错误,以及如何在不选择所有其他列的情况下只选择 id,同时仍然获得计数?

Prisma 模型如下:

model EmailAccount {
  id                    String                  @id @default(uuid())
  email                 String                  @unique
  name                  String                  @default("")
  imapServer            String                  @default("")
  imapPort              Int                     @default(993)
  imapSecure            Boolean                 @default(true)
  smtpServer            String                  @default("")
  smtpPort              Int                     @default(465)
  smtpSecure            Boolean                 @default(true)
  dateCreated           DateTime                @default(now())
  dateUpdated           DateTime                @default(now())
  active                Boolean                 @default(false)
  passwordEncrypted     String                  @default("")
  passwordIV            String                  @default("")
  passwordAuthTag       String                  @default("")
  passwordKey           Int                     @default(0)
  keyRotationDate       DateTime                @default(now())
  keyRotationFrequency  String                  @default("")
  keyNextRotationDate   DateTime                @default(now())
  KeyRotationStatus     String                  @default("NeverRotated")
  StorePassword         Boolean                 @default(true)
  MaxToRetrieve         Int                     @default(100)
  emailRules            EmailRule[] // Relation to EmailRule records
  folders               Folder[] // Relation to Folder records
  RulesProcessedHistory RulesProcessedHistory[] // Relation to RulesProcessedHistory records
}
prisma
1个回答
0
投票

解释

include
用于从关系中选择数据。就您而言,如果您只想返回
emailAccount.id
,则应该使用
select
,而不是
include

select
include
不能同时使用同一级别:

请注意,您不能在同一级别上使用选择和包含。 [..] 相反,使用嵌套选择选项

https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#select-specific-relation-fields

解决方案

您可以在顶级选择中移动

_count
语句 - 我相信这应该有效:

const emailAccounts = await prisma.emailAccount.findMany({
  select: {
    id: true,
    _count: {
      select: { folders: true, emailRules: true, RulesProcessedHistory: true },
    },
  },
});
© www.soinside.com 2019 - 2024. All rights reserved.