текст перекладу
Prisma — це бібліотека, яка підтримує багато баз даних і полегшує перехід між ними.
Один з найбільших плюсів — це спрощення переходу між базами даних, наприклад, з MySQL до MongoDB.
Вона також полегшує роботу з запитами до бази даних, забезпечуючи типову безпеку, а також автоматично генерує схеми для нас.
(Зображення, 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ı