Prisma CLI'yi kurun:
npm install prisma --save-dev
Projede Prisma'yı başlatın:
npx prisma init
Veri modelinizi schema.prisma
dosyasında tanımlayın:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
String
: Metin değerleriInt
: Tam sayılarFloat
: Kesirli sayılarBoolean
: Doğru/yanlış değerlerDateTime
: Tarih ve saat değerleriJson
: JSON verileriBytes
: İkili veriler@relation
ile @unique
alanı@relation
Çok-Çok ilişkisi örneği:
model Category {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
categories Category[]
}
Prisma'daki çeşitli ilişki türlerini göstermek için gerçek bir senaryoyu inceleyelim. Basit bir e-ticaret sistemi modelleyeceğiz: kullanıcılar, siparişler, ürünler ve kategoriler.
Aşağıdaki varlıklar olacak:
model User {
id Int @id @default(autoincrement())
email String @unique
name String
orders Order[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Order {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
orderItems OrderItem[]
totalAmount Decimal
status OrderStatus
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model OrderItem {
id Int @id @default(autoincrement())
order Order @relation(fields: [orderId], references: [id])
orderId Int
product Product @relation(fields: [productId], references: [id])
productId Int
quantity Int
price Decimal
}
model Product {
id Int @id @default(autoincrement())
name String
description String?
price Decimal
stock Int
category Category @relation(fields: [categoryId], references: [id])
categoryId Int
orderItems OrderItem[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Category {
id Int @id @default(autoincrement())
name String
products Product[]
parentCategory Category? @relation("SubCategories", fields: [parentId], references: [id])
parentId Int?
subcategories Category[] @relation("SubCategories")
}
enum OrderStatus {
PENDING
PROCESSING
SHIPPED
DELIVERED
CANCELLED
}
Bir-Çok İlişki:
Çok-Çok İlişki:
Kendi Kendine İlişki:
Bir-Bir İlişki:
model UserProfile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String
profile UserProfile?
// ... diğer alanlar
}
Bu ilişkileri kullanan bazı örnek sorgular:
const userWithOrders = await prisma.user.findUnique({
where: { id: 1 },
include: { orders: true }
})
const orderWithItems = await prisma.order.findUnique({
where: { id: 1 },
include: {
orderItems: {
include: { product: true }
}
}
})
const categoryWithSubcategories = await prisma.category.findUnique({
where: { id: 1 },
include: {
subcategories: true,
products: true
}
})
Prisma Client'ı oluşturun:
npx prisma generate
Kodunuzda Prisma Client'ı kullanın:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const newUser = await prisma.user.create({
data: {
email: 'john@example.com',
name: 'John Doe',
posts: {
create: {
title: 'My first post',
content: 'This is the content of my first post',
},
},
},
include: {
posts: true,
},
})
// Tek bir kullanıcıyı al
const user = await prisma.user.findUnique({
where: { id: 1 },
})
// Kullanıcılarla birlikte gönderileri alın
const usersWithPosts = await prisma.user.findMany({
include: { posts: true }
})
const updatedUser = await prisma.user.update({
where: { id: 1 },
data: {
name: 'John Smith',
},
})
const deletedUser = await prisma.user.delete({
where: { id: 1 },
})
const filteredUsers = await prisma.user.findMany({
where: {
email: {
contains: '@example.com'
},
createdAt: {
gt: new Date('2024-01-01')
}
}
})
const sortedPosts = await prisma.post.findMany({
orderBy: {
createdAt: 'desc'
}
})
Veri göçlerini oluşturun:
npx prisma migrate dev --name <migration-name>
Göçleri uygulayın:
npx prisma migrate deploy
Veri tozumu oluşturun:
npx prisma db seed
2024 © Tüm hakları saklıdır - buraxta.com