正如标题所述,我在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
字段,并将groupId
和activityId
字段更改为可选。我还将role
字段的类型更改为String
。我运行prisma migrate
和prisma 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类型。此外,groupId
和activityId
字段仍按要求显示。我不知道是否有某种缓存。我已经尝试删除所有迁移并从头开始重新部署所有内容。我甚至删除了Heroku中的数据库并重新启动,但我仍然得到相同的错误。
5条答案
按热度按时间vfh0ocws1#
运行
npm install
(不需要删除node_modules),然后重新生成Prisma类型可以解决此问题。由于
npm i
删除了旧的Prisma代,因此npx prisma generate
必须从schema.prisma
生成新的Prisma代。Ryan关于为Prisma添加安装后脚本的评论也是一个很好的QOL改进。
**编辑:**关闭并打开您的编辑器(在我的情况下是VsCode)将修复红线错误。我认为扩展很难用新的更改更新自己。这是一个痛苦,但如果其他解决方案不起作用,它确实有效。
9jyewag02#
要在运行
npx prisma migrate dev
或npx prisma db push
后在VS Code中修复此问题,您可以尝试以下方法之一:Ctrl + Shift + P
,然后搜索Restart TS server
)上面的两种方法需要几分钟才能让VS Code重新工作,所以我推荐这种方法:
node_modules\.prisma\client\index.d.ts
,让VS Code重新索引这个文件(因为它太大了,VS Code不会重新加载这个文件),然后它会在几秒钟内工作。b0zn9rqh3#
我有一些更接近这个问题的东西。在我的情况下,我用新的模型更新了我的Schema.prisma,但是每当我运行“prisma migrate dev”时,它都不会更新。原来这个错误是因为我在运行代码之前进行更改后没有点击“保存”。(在我的辩护中,我认为自动保存可以解决这个问题,但没有)。
在运行“prisma migrate dev”之前,请再次尝试保存该文件。
pu3pd22g4#
你可以在migrations.sql文件中更新它,然后运行prisma migrate dev。
yhuiod9q5#
运行
npx prisma db push
后,必须重新启动VS Code以显示更改。