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 步添加了所需的列 ModifiedDatePost 表没有默认值。有 此表中有 2 行,无法执行此步骤。 • 步骤 2 将所需列 ModifiedDate 添加到 Profile 表中 没有默认值。此表有 1 行,不是 可以执行此步骤。 • 第 4 步添加了所需的列 ModifiedDateUser 表,没有默认值。有 此表有 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 的历史状态对象

Git新手教程-撤销更改(七)

通过 Windows 批处理文件执行时 ECHO 无法正常工作

无法更改执行包任务 SSIS 中的引用类型

未捕获的 InvalidStateError:无法在“IDBDatabase”上执行“事务”:版本更改事务正在运行

怎么处理sqlserver2017部署在winowsDocker上时区无法修改成功的方式。