next.js 添加新字段后,Prisma架构未正确更新

kx7yvsdv  于 2023-04-05  发布在  其他
关注(0)|答案(5)|浏览(264)

正如标题所述,我在Next JS应用程序中使用Prisma 2。我有一个非常简单的模式:

model User {
  id             Int       @id @default(autoincrement())
  firstName      String
  middleName     String?
  firstLastname  String
  secondLastname String?
  email          String
  role           String
  group          Group?    @relation(fields: [groupId], references: [id])
  groupId        Int?
  activity       Activity? @relation(fields: [activityId], references: [id])
  activityId     Int?
  createdOn      DateTime  @default(now())
  updatedOn      DateTime  @default(now())
}

model JobTitle {
  id        Int      @id @default(autoincrement())
  name      String
  createdOn DateTime @default(now())
  updatedOn DateTime @default(now())
}

model Group {
  id        Int      @id @default(autoincrement())
  name      String
  users     User[]
  createdOn DateTime @default(now())
  updatedOn DateTime @default(now())
}

model Activity {
  id    Int    @id @default(autoincrement())
  name  String
  users User[]
}

我在User模型中添加了email字段,并将groupIdactivityId字段更改为可选。我还将role字段的类型更改为String。我运行prisma migrateprisma up来创建新迁移并同步数据库(使用远程heroku postgresql数据库作为我的数据源),一切运行正常。没有错误。但是,当我尝试创建一个新的用户时,我得到以下错误:

An error ocurred:  PrismaClientValidationError:
Invalid `prisma.user.create()` invocation:

{
  data: {
    firstName: 'John',
    middleName: 'Edgar',
    firstLastname: 'Doe',
    secondLastname: 'Smith',
    email: 'john@email.com',
    ~~~~~
    role: 'ADMIN',
          ~~~~~~~
+   group: {
+     create?: GroupCreateWithoutUsersInput,
+     connect?: GroupWhereUniqueInput,
+     connectOrCreate?: GroupCreateOrConnectWithoutusersInput
+   },
+   activity: {
+     create?: ActivityCreateWithoutUsersInput,
+     connect?: ActivityWhereUniqueInput,
+     connectOrCreate?: ActivityCreateOrConnectWithoutusersInput
+   },
?   createdOn?: DateTime,
?   updatedOn?: DateTime
  }
}

Unknown arg `email` in data.email for type UserCreateInput. Did you mean `role`?
Argument role: Got invalid value 'ADMIN' on prisma.createOneUser. Provided String, expected RoleCreateOneWithoutUserInput:
type RoleCreateOneWithoutUserInput {
  create?: RoleCreateWithoutUserInput
  connect?: RoleWhereUniqueInput
  connectOrCreate?: RoleCreateOrConnectWithoutUserInput
}
Argument group for data.group is missing.
Argument activity for data.activity is missing.

Note: Lines with + are required, lines with ? are optional.

    at Document.validate (C:\Users\user\Documents\projects\employee-evaluation-app\employee-evaluation-app\node_modules\@prisma\client\runtime\index.js:77411:19)
    at NewPrismaClient._executeRequest (C:\Users\user\Documents\projects\employee-evaluation-app\employee-evaluation-app\node_modules\@prisma\client\runtime\index.js:79063:17)
    at C:\Users\user\Documents\projects\employee-evaluation-app\employee-evaluation-app\node_modules\@prisma\client\runtime\index.js:79000:52
    at AsyncResource.runInAsyncScope (node:async_hooks:197:9)
    at NewPrismaClient._request (C:\Users\user\Documents\projects\employee-evaluation-app\employee-evaluation-app\node_modules\@prisma\client\runtime\index.js:79000:25)
    at Object.then (C:\Users\user\Documents\projects\employee-evaluation-app\employee-evaluation-app\node_modules\@prisma\client\runtime\index.js:79117:39)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:93:5) {
  clientVersion: '2.12.0'
}

看起来操作使用的是以前版本的模式,因为它说电子邮件字段不存在,role字段不是String类型。此外,groupIdactivityId字段仍按要求显示。我不知道是否有某种缓存。我已经尝试删除所有迁移并从头开始重新部署所有内容。我甚至删除了Heroku中的数据库并重新启动,但我仍然得到相同的错误。

vfh0ocws

vfh0ocws1#

运行npm install(不需要删除node_modules),然后重新生成Prisma类型可以解决此问题。
由于npm i删除了旧的Prisma代,因此npx prisma generate必须从schema.prisma生成新的Prisma代。
Ryan关于为Prisma添加安装后脚本的评论也是一个很好的QOL改进。

**编辑:**关闭并打开您的编辑器(在我的情况下是VsCode)将修复红线错误。我认为扩展很难用新的更改更新自己。这是一个痛苦,但如果其他解决方案不起作用,它确实有效。

9jyewag0

9jyewag02#

要在运行npx prisma migrate devnpx prisma db push后在VS Code中修复此问题,您可以尝试以下方法之一:

  • 重新加载VS代码(只需关闭并重新打开VS代码)
  • 重新启动VS Code语言服务器(点击Ctrl + Shift + P,然后搜索Restart TS server

上面的两种方法需要几分钟才能让VS Code重新工作,所以我推荐这种方法:

  • 打开文件node_modules\.prisma\client\index.d.ts,让VS Code重新索引这个文件(因为它太大了,VS Code不会重新加载这个文件),然后它会在几秒钟内工作。
b0zn9rqh

b0zn9rqh3#

我有一些更接近这个问题的东西。在我的情况下,我用新的模型更新了我的Schema.prisma,但是每当我运行“prisma migrate dev”时,它都不会更新。原来这个错误是因为我在运行代码之前进行更改后没有点击“保存”。(在我的辩护中,我认为自动保存可以解决这个问题,但没有)。
在运行“prisma migrate dev”之前,请再次尝试保存该文件。

pu3pd22g

pu3pd22g4#

你可以在migrations.sql文件中更新它,然后运行prisma migrate dev

yhuiod9q

yhuiod9q5#

运行npx prisma db push后,必须重新启动VS Code以显示更改。

相关问题