当将 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
}
include
用于从关系中选择数据。就您而言,如果您只想返回 emailAccount.id
,则应该使用 select
,而不是 include
。
select
和include
不能同时使用同一级别:
请注意,您不能在同一级别上使用选择和包含。 [..] 相反,使用嵌套选择选项
您可以在顶级选择中移动
_count
语句 - 我相信这应该有效:
const emailAccounts = await prisma.emailAccount.findMany({
select: {
id: true,
_count: {
select: { folders: true, emailRules: true, RulesProcessedHistory: true },
},
},
});