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

Messsage

Nếu bạn thích chia sẻ của tôi, đừng quên nhấn nút !ĐĂNG KÝ