Node.js — 1: Prisma / Робота з кількома базами даних

текст перекладу
Prisma — це бібліотека, яка підтримує багато баз даних і полегшує перехід між ними.

Один з найбільших плюсів — це спрощення переходу між базами даних, наприклад, з MySQL до MongoDB.

Вона також полегшує роботу з запитами до бази даних, забезпечуючи типову безпеку, а також автоматично генерує схеми для нас.

pic

(Зображення, I.)

Для початку давайте встановимо бібліотеку:

npm i prisma @prisma/client  

npx prisma init  

npx prisma generate

Після того як Prisma створить схему, давайте виконаємо міграцію:

npx prisma migrate dev --name init

Тепер відкриємо каталог, в який ми виконали команду prisma init, і створимо папку prisma, а в ній файл schema.prisma і введемо наступний код:

Усі таблиці створюються в цьому єдиному файлі:

generator client {  
 provider = "prisma-client-js"  
}  

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

model User {  
 id String @id @default(auto()) @map("_id") @test.ObjectId  
 username String  
 email String @unique  
 createdAt DateTime @default(now())  
}

Ви можете змінити значення provider на mysql або postgresql.

Типи Prisma:

String  
Int  
Float  
Boolean  
DateTime  
Json  
Bytes  
BigInt  
UUID @default(uuid())

Декоратори Prisma:

@id // визначає первинний ключ  
@id @default(autoincrement()) // автоматичне збільшення id  
@default() // встановлює значення за замовчуванням, наприклад @default(now())  
@unique // робить значення унікальним  
@updatedAt // вказує час оновлення

Відносини між таблицями в Prisma / @relation:

POST SCHEMA:  
user User @relation(fields: [userId], references: [id])  


fields: [userId]:   
/* Це вказує на наявність поля userId в моделі Post,  
яке посилається на запис у моделі User. */  

references: [id]: /* Визначає, що поле userId посилається на поле id  
моделі User.   
Тобто, значення userId в моделі Post співпадає з унікальним id  
в моделі User.  
*/  

UserSchema:  
posts Post[]

Використання enum в Prisma:

enum Role {  
 USER  
 ADMIN  
 MODERATOR  
}  

model User {  
 id Int @id @default(autoincrement())  
 role Role  
}

Спеціальні поля в Prisma:

nickname String? // позначається, що це поле необов'язкове  
tags String[] // вказує, що поле може містити масив значень  
firstName String @map("first_name") /* Використовується для відображення 
полів у базі даних під іншими іменами */

текст перекладу
*/  

@index, @unique /* Додавання індексу або обмежень унікальності до кількох полів: */  
@@index([email, phoneNumber])  
@@unique([username, email])

З'єднання з Prisma:

const { PrismaClient } = require('@prisma/client')  
const prisma = new PrismaClient()  

prisma.$disconnect() // закриває з'єднання

Створення користувача:

await prisma.user.create({  
 data: {  
 username: "burakbehlull",  
 email: "[email protected]",  
 }  
})

Видалення користувача:

await prisma.user.delete({  
 where: {  
 id: 1,  
 }  
})

Оновлення користувача:

await prisma.user.delete({  
 where: {  
 id: 1,  
 }  
})

Масове оновлення:

const updatedUsers = await prisma.user.updateMany({  
 where: {  
 status: "inactive",  
 },  
 data: {  
 status: "active",  
 },  
})

Масове видалення:

const deletedUsers = await prisma.user.deleteMany({  
 where: {  
 status: "inactive",  
 }  
})

Підрахунок загальної кількості документів:

const userCount = await prisma.user.count({  
 where: {  
 status: "active",  
 },  
})

Метод upsert використовується для створення нового запису, якщо певний запис не існує, або для оновлення існуючого:

const upsertedUser = await prisma.user.upsert({  
 where: {  
 email: "[email protected]",  
 },  
 update: {  
 username: "burakbehlull",  
 },  
 create: {  
 username: "burakbehlull",  
 email: "[email protected]",  
 createdAt: new Date(),  
 },  
})

Незалежно від того, яку базу даних ви використовуєте, методи для роботи з користувачами будуть однаковими.

Просто переконайтеся, що ви правильно вказали типи даних у схемі. Типи даних для MongoDB та SQL баз можуть викликати помилки, якщо вони не співпадають.

Успіхів у програмуванні!

Перекладено з: Nodejs —1: Prisma / Çoklu Veritabanı

Leave a Reply

Your email address will not be published. Required fields are marked *