跳至主要内容

迁移你的 schema

在你的 schema 中添加一个 Tag 模型

在本节中,你将迁移你的 Prisma schema,然后使用 prisma migrate dev 生成并应用迁移到你的数据库。

出于本指南的目的,我们将对 Prisma schema 进行以下更改

  1. 创建一个名为 Tag 的新模型,其中包含以下字段
    • id:一个自增整数,将作为模型的主键
    • name:一个非空 String
    • posts:一个隐式多对多关系字段,链接到 Post 模型
  2. 更新 Post 模型,其中包含一个 tags 字段,这是一个隐式多对多关系字段,链接到 Tag 模型

在你对 schema 完成更改后,你的 schema 应该类似于下面的示例

prisma/schema.prisma
model Post {
id Int @id @default(autoincrement())
title String @db.VarChar(255)
createdAt DateTime @default(now()) @db.Timestamp(6)
content String?
published Boolean @default(false)
authorId Int
user User @relation(fields: [authorId], references: [id])
tags Tag[]
}

model Profile {
id Int @id @default(autoincrement())
bio String?
userId Int @unique
user User @relation(fields: [userId], references: [id])
}

model User {
id Int @id @default(autoincrement())
name String? @db.VarChar(255)
email String @unique @db.VarChar(255)
post Post[]
profile Profile?
}

model Tag {
id Int @id @default(autoincrement())
name String
posts Post[]
}

要将你的 Prisma schema 更改应用到你的数据库,请使用 prisma migrate dev CLI 命令

npx prisma migrate dev --name tags-model

此命令将

  1. 为迁移创建一个新的 SQL 迁移文件
  2. 将生成的 SQL 迁移应用到数据库
  3. 重新生成 Prisma Client

以下迁移将被生成并保存在你的 prisma/migrations 文件夹中

prisma/migrations/TIMESTAMP_tags_model.sql
-- CreateTable
CREATE TABLE Tag (
id SERIAL NOT NULL,
name VARCHAR(255) NOT NULL,

CONSTRAINT Tag_pkey PRIMARY KEY (id)
);

-- CreateTable
CREATE TABLE _PostToTag (
A INTEGER NOT NULL,
B INTEGER NOT NULL
);

-- CreateIndex
CREATE UNIQUE INDEX _PostToTag_AB_unique ON _PostToTag(A, B);

-- CreateIndex
CREATE INDEX _PostToTag_B_index ON _PostToTag(B);

-- AddForeignKey
ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_A_fkey FOREIGN KEY (A) REFERENCES Post(id) ON DELETE CASCADE ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE _PostToTag ADD CONSTRAINT _PostToTag_B_fkey FOREIGN KEY (B) REFERENCES Tag(id) ON DELETE CASCADE ON UPDATE CASCADE;

恭喜你,你刚刚使用 Prisma Migrate 迁移了你的数据库 🚀