跳至主要内容

扩展您的架构

在您的架构中添加 `Tag` 模型

在本节中,您将扩展 Prisma 架构,然后使用 prisma migrate dev 生成和应用迁移到您的数据库。

为了本指南的目的,我们将对 Prisma 架构进行以下更改

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

完成对架构的更改后,您的架构应与以下示例类似

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 架构更改应用到您的数据库,请使用 `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 扩展了您的数据库 🚀