我在我的项目中使用prisma.js作为ORM。
在执行npx prisma migrate dev --name rename_and_add_some_columns
之后,我得到了这个错误:
我们发现无法执行的更改
错误详情:
步骤1在Post
表中添加了所需的列CategoryId
,没有默认值。该表中有2行,无法执行此步骤。·步骤1在Post
表中添加了所需的列ModifiedDate
,没有默认值。该表中有2行,无法执行此步骤。·步骤2将所需列ModifiedDate
添加到没有默认值的Profile
表中。此表中有1行,无法执行此步骤。·步骤4将所需列ModifiedDate
添加到没有默认值的User
表中。此表中有2行,无法执行此步骤。
您可以使用prisma migrate dev--create-only来创建迁移文件,并手动修改它以解决底层问题,然后运行prisma migrate dev来应用它并验证它是否工作。
我该怎么解决呢?
//这是我的Prisma模式文件,
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Category {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Title String @db.VarChar(50)
IsActive Boolean
Posts Post[]
}
model Post {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Title String @db.VarChar(255)
Description String?
IsPublished Boolean @default(false)
IsActive Boolean @default(true)
IsActiveNewComment Boolean @default(true)
Author User @relation(fields: [AuthorId], references: [Id])
AuthorId Int
Comment Comment[]
Tag Tag[] @relation("TagToPost", fields: [tagId], references: [Id])
tagId Int?
Category Category @relation(fields: [CategoryId], references: [Id])
CategoryId Int
}
model User {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Email String @unique
Name String?
Posts Post[]
Profile Profile?
Comments Comment[]
}
model Profile {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Bio String?
User User @relation(fields: [UserId], references: [Id])
UserId Int @unique
}
model Comment {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Comment String
WrittenBy User @relation(fields: [WrittenById], references: [Id])
WrittenById Int
Post Post @relation(fields: [PostId], references: [Id])
PostId Int
}
model Tag {
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @updatedAt
Title String @unique
Posts Post[] @relation("TagToPost")
}
5条答案
按热度按时间ou6hu8tu1#
要运行此迁移,您需要:
1.首先创建可选字段,然后运行
migrate
1.请先在字段中填写所需日期。
1.从字段中删除可选的(
?
)。Prisma会自动添加
@updatedAt
(不是在数据库级别完成的),因此需要遵循以下步骤。erhoui1w2#
或者,你可以只把
@default(now())
添加到你的ModifiedDate
属性中,例如,Category
模型将是:krcsximq3#
在Post模型中,我将
Category
更改为Category?
,将Int
更改为Int?
此外,我将ModifiedDate中的
Datetime
更改为Datetime?
rwqw0loc4#
我追溯性地添加了
createdAt
和updatedAt
字段,并且我不想为现有字段提供updatedAt
值,但是我可以接受now()
将成为现有值的默认createdAt
这一事实。在
updatedAt
字段的DateTime?
后面添加一个?
问号,使其成为可选字段。移植方案时,默认情况下该字段为null
,但在后续更新该行时将按预期填充。rqqzpn5f5#
您必须重置数据库和模式
1.获取数据库的备份(注意,如果更改某些数据类型,则必须更改数据!)
1.重置prisma迁移:
npx棱镜迁移重置
1.将模式迁移到数据库:
npx棱镜迁移开发