Prisma.js:我们发现无法执行的更改
Posted
技术标签:
【中文标题】Prisma.js:我们发现无法执行的更改【英文标题】:Prisma.js: We found changes that cannot be executed 【发布时间】:2021-08-24 02:54:19 【问题描述】:我在我的项目中使用 prisma.js 作为 ORM。
执行npx prisma migrate dev --name rename_and_add_some_columns
后,
我收到了这个错误:
我们发现无法执行的更改
错误详情:
第 1 步将所需的列
CategoryId
添加到Post
表中 没有默认值。此表有 2 行,不是 可以执行此步骤。 • 第 1 步添加了所需的列ModifiedDate
到Post
表没有默认值。有 此表中有 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")
【问题讨论】:
【参考方案1】:为了运行此迁移,您需要:
首先创建字段作为可选,然后运行migrate
首先在字段中填写所需的日期。
从字段中删除可选的 (?
)。
Prisma 会自动添加 @updatedAt
(不在数据库级别完成),因此需要遵循这些步骤。
【讨论】:
为什么要执行第 3 步(从字段中删除可选的 (?))?不这样做,它就可以工作。 如果你想要它是必需的,如果不是那么它完全没问题。【参考方案2】:或者,您可以将@default(now())
添加到您的ModifiedDate
属性中。因此,例如,Category
模型将是:
model Category
Id Int @id @default(autoincrement())
CreatedDate DateTime @default(now())
ModifiedDate DateTime @default(now()) @updatedAt
Title String @db.VarChar(50)
IsActive Boolean
Posts Post[]
【讨论】:
【参考方案3】:在 Post 模型中,我将 Category
更改为 Category?
并将 Int
更改为 Int?
另外,我将 ModifiedDate 中的 Datetime
更改为 Datetime?
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")
【讨论】:
以上是关于Prisma.js:我们发现无法执行的更改的主要内容,如果未能解决你的问题,请参考以下文章
无法在“历史”上执行“replaceState”:具有 URL 的历史状态对象
通过 Windows 批处理文件执行时 ECHO 无法正常工作