Connect database Postgresql with Prisma in Next.js 13

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;

 

Bài Viết Liên Quan

x

Xin chào! Hãy ủng hộ chúng tôi bằng cách nhấp vào quảng cáo trên trang web. Việc này giúp chúng tôi có kinh phí để duy trì và phát triển website ngày một tốt hơn. (Hello! Please support us by clicking on the ads on this site. Your clicks provide us with the funds needed to maintain and improve the website continuously.)

Ngoài ra, hãy đăng ký kênh YouTube của chúng tôi để không bỏ lỡ những nội dung hữu ích! (Also, subscribe to our YouTube channel to stay updated with valuable content!)

Đăng Ký