Connect database Postgresql with Prisma in Next.js 13. Chúng ta xây dựng database cùng với Prisma.
Trong Prisma ta cần cấu hình các Model đúng với cấu trúc dữ liệu. Sau đó chúng ta dùng lệnh migration trong Prisma để tạo cở sở dữ liệu đến Postgresql.
Nếu mọi thứ thành công, chúng ta có thể sử dụng Prisma trong Next.js, để thao tác các câu lệnh truy vấn đển Postgresql, chẳng hạn như :create, edit, update, delete,...
# .env
DATABASE_URL="postgresql://hoadev:hoadev123@localhost:5432/hoadev_db?schema=public"
# shema.primsa
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init 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? products Product[] user_role User_Role[] user_group User_Group[] } model Role { id Int @id @default(autoincrement()) name String user_role User_Role[] role_permission Role_Permission[] } model User_Role { userId Int roleId Int user User @relation(fields: [userId], references: [id]) role Role @relation(fields: [roleId], references: [id]) @@id([userId, roleId]) } model Permission { id Int @id @default(autoincrement()) name String role_permission Role_Permission[] } model Role_Permission { roleId Int PermissionId Int role Role @relation(fields: [roleId], references: [id]) Permission Permission @relation(fields: [PermissionId], references: [id]) @@id([roleId, PermissionId]) } model Group{ id Int @id @default(autoincrement()) name String user_group User_Group[] } model User_Group{ userId Int groupId Int user User @relation(fields: [userId],references: [id]) group Group @relation(fields: [groupId], references: [id]) @@id([userId,groupId]) } model Product { id Int @id @default(autoincrement()) title String description String slug String price Float discountPercentage Float rating Float stock Int brand String category String thumbnail String images Json? author User @relation(fields: [authorId], references: [id]) authorId Int product_categories_category Product_Category[] } model Category { id Int @id @default(autoincrement()) name String slug String parent Int position Int product_categories_category Product_Category[] } model Product_Category { id Int @id @default(autoincrement()) productId Int? categoryId Int? category Category? @relation(fields: [categoryId], references: [id]) product Product? @relation(fields: [productId], references: [id]) }
# _lib/prisma/index.ts :
Tạo file này trong Next.js của bạn để sử dụng prisma
import { PrismaClient } from '@prisma/client'; let prisma: PrismaClient; declare const global: { prisma?: PrismaClient; }; if (process.env.NODE_ENV === 'production') { prisma = new PrismaClient(); } else { if (!global.prisma) { global.prisma = new PrismaClient(); } prisma = global.prisma; } export default prisma;