如标题所述,我在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[]
}
我在用户模型上添加了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'
}
看起来操作正在使用先前版本的架构,因为它显示电子邮件字段不存在,而角色
字段不是字符串类型。此外,groupId
和activityId
仍然被显示为必需的。我不知道是否存在某种缓存。我已经尝试删除所有迁移并从头重新部署所有内容。我甚至在 Heroku 中删除了数据库并重新开始,但仍然收到相同的错误。
package.json
文件中将prisma generate
添加为postinstall
脚本,这样最新的 PrismaClient 就会被自动生成。一个用户 在这里 遇到了同样的问题,而这个脚本解决了它。 - Ryanprisma generate
命令,在重新启动本地服务器后它成功了。看来我只是需要更仔细地阅读文档。每次对模式进行更改时都需要运行此命令。非常感谢您的帮助! - Isaac