在之前的文章中,我们介绍了使用 TypeORM 进行数据库操作。本文将介绍另一个强大的 ORM 工具 - Prisma,探讨如何在 NestJS 中集成和使用 Prisma。
Prisma 简介与环境搭建
1. 安装依赖
# 安装 Prisma 相关依赖
npm install prisma @prisma/client
# 初始化 Prisma
npx prisma init
2. 配置数据库连接
# .env
DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
3. 项目结构
src/
├── prisma/
│ ├── schema.prisma # Prisma 模型定义
│ └── migrations/ # 数据库迁移文件
├── modules/
│ └── users/
│ ├── users.service.ts
│ ├── users.controller.ts
│ └── dto/
└── prisma.service.ts # Prisma 服务
模型设计
1. 定义数据模型
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
tags Tag[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
posts Post[]
}
2. 生成并应用迁移
# 生成迁移文件
npx prisma migrate dev --name init
# 应用迁移
npx prisma migrate deploy
Prisma 服务集成
1. 创建 Prisma 服务
// src/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
constructor() {
super({
log: ['query', 'info', 'warn', 'error'],
});
}
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
async cleanDatabase() {
if (process.env.NODE_ENV === 'test') {

最低0.47元/天 解锁文章
622

被折叠的 条评论
为什么被折叠?



