Prisma报错:无法同时选择'$scalars: true'与特定字段'accountCompanies'求助
解决Prisma查询错误:Cannot select both '$scalars: true' and a specific scalar field 'accountCompanies'
问题详情
错误提示:Cannot select both '$scalars: true' and a specific scalar field 'accountCompanies'
数据模型定义
model Account { id String @id @default(cuid()) avatar String? lastName String firstName String accountCompanies AccountCompany[] } model Company { id String @id @default(cuid()) name String accountCompanies AccountCompany[] } model AccountCompany { account Account @relation(fields: [accountId], references: [id], onDelete: Cascade) accountId String company Company @relation(fields: [companyId], references: [id], onDelete: Cascade) companyId String role Role @default(GENERAL) @@id(fields: [accountId, companyId]) }
触发错误的查询代码
const account = await prisma.account.findUnique({ where: { auth0UserId: auth0User.sub }, include: { accountCompanies: true }, });
错误原因
这个错误是因为查询同时使用了隐式的全量标量选择($scalars: true)和显式指定关联字段accountCompanies,Prisma不允许这种混合写法。另外注意你的Account模型中没有定义auth0UserId字段,当前查询的where条件也会触发字段不存在的错误,需要先补全模型字段。
修复步骤
- 补全数据模型字段
在Account模型中添加auth0UserId字段:
model Account { id String @id @default(cuid()) avatar String? lastName String firstName String auth0UserId String @unique // 添加该字段并设置唯一约束 accountCompanies AccountCompany[] }
- 修改查询代码
用select语法明确指定需要的标量字段和关联字段,替代隐式全量选择:
const account = await prisma.account.findUnique({ where: { auth0UserId: auth0User.sub }, select: { id: true, avatar: true, lastName: true, firstName: true, accountCompanies: true }, });
如果需要所有标量字段,也可以用$allScalars(需Prisma较新版本支持):
const account = await prisma.account.findUnique({ where: { auth0UserId: auth0User.sub }, select: { $allScalars: true, accountCompanies: true }, });
- 更新数据库与客户端
修改模型后,运行以下命令同步数据库并重新生成Prisma客户端:
prisma migrate dev # 开发环境 prisma generate
内容的提问来源于stack exchange,提问作者Yusuke
相关产品推荐
相关产品推荐

