Nestjs+Prisma终于支持多文件模块

3,387 阅读2分钟

Prisma 是最为流行的 ORM, 目前 Prisma 的模型已经开始支持多文件,这解决一个文件中写所有的问题。

Prisma 特性

  • 🌴基于 TypeScript 类型安全,自动生成操作数据 API
  • 🌴自创了 Prisma.schema PSL 文件,简洁明了(目前已经支持多文件)
  • 🌴多数据库抽象支持,无需关注底层
  • 🌴良好的 CLI 命令支持,自动化迁移(不是数据库之间)
  • 🌴良好的文档和社区支持

primsa 使用示例

  • 创建你的NestJS项目
npm install -g @nestjs/cli
nest new test-demo
  • 安装Prisma
npm install prisma --save-dev
npm install @prisma/client
  • 现在使用Prisma CLI的 init 命令创建初始的Prisma设置
npx prisma init

此命令创建一个新的 prisma 目录,其内容如下:

  • schema.prisma :指定数据库连接并包含数据库schema
  • .env :dotenv文件,通常用于将数据库凭据存储在一组环境变量中

连接数据库

  • 修改.env文件设置mysql连接,以下连接请根据你的情况修改
    DATABASE_URL="mysql://root:root@localhost:3306/databasename"
    #定义环境
    NODE_ENV=development

如何将 Prisma Schema 拆分为多个文件

  • 首先,确保prisma@prisma/client已至少更新至5.15.0。您还需要最新版本 (5.15.0) 的Prisma VSCode Extension,以便在 IDE 中利用这些更新。

  • 要将 Prisma Schema 拆分为多个文件,首先prismaSchemaFolder通过将其包含previewFeaturesgenerator.

  • schema.prisma

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}


generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["prismaSchemaFolder"]
}
  • 然后,在您的目录下创建一个schema子目录prisma。您可以将您的移动schema.prisma到此目录中。

  • 您现在可以在schema目录中创建其他文件!所有模型都可以在所有文件中引用,因此关系可以跨文件

  • user.prisma

model User {
  id    Int     @id @default(autoincrement())
  name  String
  posts Post[]
}
  • post.prisma
model Post {
  id       Int     @id @default(autoincrement())
  title    String
  content  String
  authorId Int
  author   User    @relation(fields: [authorId], references: [id])
}
  • 要将数据模型映射到数据库模式(即创建相应的数据库表),你需要使用 prisma migrate CLI 命令
npx prisma migrate dev --name init
  • 该命令做了两件事:

    • 它为此迁移创建一个新的 SQL 迁移文件
    • 它针对数据库运行 SQL 迁移文件
  • 该命令执行动作为:

    • 根据定义生成迁移文件
    • 执行新的迁移文件修改数据表
    • 生成 Prisma Client
  • 执行上面代码数据库表自动生成 image.png