当我想要使用在 Prisma.schema 中添加的模型时,出现了 "属性不存在" 的错误。

24

我正在使用NextJS框架和Prisma管理连接和数据库查询的ReactJS项目。

在我的本地项目中,可以找到Support模型,并且当我在API中使用它并构建我的项目时,一切正常。

但是,当我将项目推送到生产服务器(Plesk)时,构建会显示这个TypeScript错误,因为它找不到Support模型:

./src/pages/api/support/index.ts:27:26
Type error: Property 'support' does not exist on type 'PrismaClient<PrismaClientOptions, never, RejectOnNotFound | RejectPerOperation | undefined>'.

我希望在路径./src/pages/api/support/index.ts中使用Support模型。

我的prisma.schema:

datasource db {
  provider = "mysql"
  url      = env("DATABASE_CONNECTION")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id              Int       @id @unique @default(autoincrement())
  gender          String?
  firstName       String
  lastName        String
  email           String    @unique
  phone           String
  birthday        DateTime?
  income          Float?
  pincode         Int?
  points          Float?
  token           String    @db.Text
  ipAddress       String
  kyc             Kyc[]
  createdAt       DateTime  @default(now())
  updatedAt       DateTime?
  isValidated     Boolean   @default(false)
  roleId          Int
  role            Role      @relation(fields: [roleId], references: [id])
  Alerts          Alerts[]
  Support Support[]
}

model Kyc {
  id        Int       @id @unique @default(autoincrement())
  name      String
  validated Boolean   @default(false)
  path      String
  createdAt DateTime  @default(now())
  updatedAt DateTime? @updatedAt
  user      User      @relation(fields: [userId], references: [id])
  userId    Int
}

model Alerts {
  id         Int      @id @unique @default(autoincrement())
  type       TYPE     @default(NOBLOCKED)
  message    String   @db.Text
  transferId Int      @unique
  fromUserId Int
  read       Boolean  @default(false)
  createdAt  DateTime @default(now())
  user       User     @relation(fields: [fromUserId], references: [id])
}

model Role {
  id   Int    @id @unique @default(autoincrement())
  name String
  User User[]
}

model Support {
  id        Int     @id @unique @default(autoincrement())
  subject   String
  message   String  @db.Text
  createdAt DateTime  @default(now())
  userId          Int
  user            User      @relation(fields: [userId], references: [id])
}

enum TYPE {
  BLOCKED
  NOBLOCKED
}

我不知道每次推送最新更改时,是否需要使用prisma migrate dev还是prisma migrate deploy


5
在修改 Prisma 模式后,您是否运行了 prisma generate 命令生成 Prisma 客户端?prisma migrate dev 命令会同时生成迁移和 Prisma 客户端。 - Pasindu Dilshan
1
除了@PasinduDilshan提到的(这可能是问题的原因),这个问题只出现在Support模型中吗?所有其他模型都按预期工作吗? - Tasin Ishmam
1
@TasinIshmam 是的,其他模型都正常工作。这个错误只出现在 Support 模型上,因为我已经将新模型推送到生产服务器,并且从未遇到过这种类型的错误。这可能是因为我刚开始使用 prisma migrate deploy 来处理这个 Support 模型。这正是 @Pasindudilshan 所说的 prisma migrate dev,它也生成 Prisma 客户端,这就是为什么我以前从未遇到过这个错误的原因。 - Peter
4
是的,prisma migrate deploy不会生成客户端,所以你需要像提到的那样运行prisma generate。只是为了澄清一下,你现在已经解决了这个问题吗? - Tasin Ishmam
1
是的,一切都运作正常!谢谢你们的帮助! - Peter
显示剩余2条评论
14个回答

81

我尝试了 prisma generateprisma migrate dev,但仍然遇到相同的错误。我不得不重新启动 VSCode,现在一切都正常了。


1
这对我也起作用了。谢谢你的提示,我永远不会想到这个。 - wilk
11
如果你正在使用Typescript,打开命令面板(Ctrl+Shift+P),输入“Restart Typescript Server”,然后按回车键。这样做也可以帮助解决问题,而无需重启VSCode。 - monkfromearth
这对我也起作用了。谢谢。 - Jean Vidal
这也是 nvim 的解决方案。 - shredGnar
运行 $ prisma generate 对我来说很有效。我已经阅读了文档,理想情况下,每次在 prisma.schema 文件中进行更改时都应该执行 prisma generate。这是参考链接 https://www.prisma.io/docs/concepts/components/prisma-client#:~:text=4.%20Evolving%20your%20application - Lea Tinoso
显示剩余4条评论

5

我忘记了使用await关键字

const user = prisma.user.findUnique({ 
  where: {
    userId: authorUserId
  },
  select: {
    id: true
  }
})

但应该是:
const user = **await** prisma.user.findUnique({ 
  where: {
    userId: authorUserId
  },
  select: {
    id: true
  }
})

4

在VSCode中重新启动你的TypeScript服务器 CTRL + SHIFT + P 然后输入: restart TS Server


加一。谢谢。 - yanir midler

3

我已经重新启动了我的Visual Studio Code,现在它可以正常工作了。


3
尝试运行 npx prisma generate。模型应该在 Prisma 客户端中。但是,如果没有,请尝试在 VS Code 命令面板中按下 ctrl + P,然后输入 > reload window 并选择重新加载窗口选项。这应该解决问题。

2

我使用了prisma generate命令,但是模式仍然被标记为红色。我不得不重新启动我的Web Storm IDE才能解决这个问题。


2

我尝试了所有方法,甚至重新安装了Prisma客户端。对我有用的是重新创建迁移。


2

只需打开文件 ./node_modules/.prisma/client/index.d.ts

该文件包含生成的类型。打开它会立即触发 TypeScript 更新这些类型。


1
我的���题是Prisma客户端引用了模型名称,但使用驼峰命名法(camelCase),而在模式中它们是使用帕斯卡命名法(PascalCase)定义的。这让我感到困惑,因为我的大多数模型名称都只是单词,所以当我在模式中定义一个像User这样的模型名称,并在定义中添加@@map("user")时,我有这样的印象:当我执行类似于await prisma.user.delete({ ...的操作时,模型/表名user会变成小写,因为@@map声明的结果。但事实证明它不是这样,Prisma会将模型名称的第一个字母变成小写,这就是为什么对于我的模型名称OTP(带有@@map("otp)),我必须这样使用:prisma.oTP.delete({ ...

1
我在扩展中犯了一个愚蠢的错误,将PrismaClient类放在了prisma.module.ts里。
export class PrismaModule extends PrismaClient {}

prisma.service.ts

@Injectable()
export class PrismaService extends PrismaClient {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接