Ana içeriğe atla

Nodejs —1: Prisma / Çoklu Veritabanı

Nodejs —1: Prisma / Çoklu Veritabanı

Prisma, birçok veritabanını içinde barındıran ve veritabanı geçişinizi kolaylaştıracak bir kütüphane.

En güzel olaylarından biri veritabanı geçişi yani mysql’den mongodb’ye geçişimizi kolaylaştırıyor.

Veritabanı sorgularını kolaylaştırıyor. Ayrıca tip güvenliği sağlayıp, otomatik şema oluşturmamızı sağlıyor.

(Görsel, I.)

İlk olarak kütüphamizi kuralım:

npm i prisma @prisma/client

npx prisma init

npx prisma generate

Prisma şema oluşturduktan sonra migrate yapalım:

npx prisma migrate dev --name init

Sonra prisma init yaptığımız klasör dizinine prisma diye klasör açıp, schema.prisma dosyası oluşturalım ve içeriğini girelim:

Tüm tabolar bu tek dosya içerisinde oluşturulur*

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 yerini mysql veya postresql olarak değişebilirsiniz.

Prisma tipleri:

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

Prisma dekoratörleri:

@id // biricil anahtar tanımlar
@id @default(autoincrement()) // otomatik id attırır
@default() // default değer alır @default(now()) gibi
@unique // eşsiz benzersiz yapar
@updatedAt // updateleme anı

Prisma tablo ilişkileri /@relation:

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


fields: [userId]:
/* Bu, Post modelinde userId adlı bir alanın olduğunu
ve bu alanın User modelindeki bir kaydı işaret ettiğini belirtir. */


references: [id]: /* userId alanının User modelinde id
adlı alanı işaret ettiğini tanımlar.
Yani, Post modelindeki userId değeri User modelinde benzersiz bir id
ile eşleşir.
*/


UserSchema:
posts Post[]

Prisma enum kullanma:

enum Role {
USER
ADMIN
MODERATOR
}

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

Prisma özel alanlar:

nickname String? // işaretlenir ve bu alanların isteğe bağlı olduğunu belirtir.
tags String[] // bir alanın bir dizi veri saklayabileceğini belirtir.
firstName String @map("first_name") /* Veritabanında farklı bir adla
saklamak istediğiniz alanları maplemek için kullanılır. */


@index, @unique /* ile Birden Fazla Alana İndeks
veya Benzersizlik Kısıtlamaları Eklemek: */

@@index([email, phoneNumber])
@@unique([username, email])

Prisma Bağlanmak:

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

prisma.$disconnect() // bağlantıyı kapat

Bir kullanıcı yaratma:

await prisma.user.create({
data: {
username: "burakbehlull",
email: "burakbehlul@gmail.com",
}
})

Kullanıcı silme:

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

Kullanıcıyı güncelleme:

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

Çoklu güncelleme:

const updatedUsers = await prisma.user.updateMany({
where: {
status: "aktif değil",
},
data: {
status: "aktif",
},
})

Çok silme:

const deletedUsers = await prisma.user.deleteMany({
where: {
status: "aktif değil",
}
})

Döküman toplam sayısı bulma:

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

Upsert methodu, belirli bir kayıt yoksa yeni bir kayıt oluşturmak varsa güncellemek için kullanılır:

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

Hangi veritabanını kullanırsanız kullanın, kullanıcı işlemleriyle ilgili methodlar aynı olacaktır.

Sadece şemada gireceğiz veri tiplerini düzgün giriniz. Mongodb veritabanı tipleriyle sql veritabanı tipleri hata verir.

İyi kodlamalar!

Yorumlar

Bu blogdaki popüler yayınlar

Yıldırım Beyazıd ve Emir Timurlenk Savaşı

YILDIRIM BEYAZID VE EMİR TİMUR LENK SAVAŞI Ankara Savaşı (28 Temmuz 1402) Cengiz Han'ın vârisi olma iddiası ile çıkan Emir Timur. Beyazı'dın egemen olmasını kabul etmiyor. Onu küçümsüyor. Timur'un tahtını ele geçirmek için isyan başlatan   ve Timur Hindistan seferinden gelince bizzat kendisi tarafından kovulan Diyarbakır Beyi İlhan Ahmet Celâyir, Osmanlı'ya sığınmıştı. Epey Timur ve Beyazıd'ın arası gergindi. Fakat Timur kendi ırkından, dininden olan Osmanlı’ya saldırmak istemiyordu.   Timur’a tabî olan Mutahharten’ın ailesini Bursa’ya esir olarak gönderen Beyazid ile Timur’un arası açılmıştı.   “ Timur, kendisini sadece dünya üzerinde ulaşabileceği yere kadar hırsını doyurmak için Allah tarafından gönderilen “Allah’ın kulu” olarak değil, Türk halkının da gerçek ve tek temsilcisi olarak görüyordu. Yörüklerin bol paçalı şalvarları içinde, başında yüksek keçe başlığı ile tam bir Türk gibi giyinirdi.. Sarayı’nda sadece Türkçe konuşulur ve Türkçe yazı yazılır...

C# öğrenmek 102: Form Application

C# öğrenmek 102: Form Application C# öğrenirken en çok kullanacağımız yapı, Form App ’dir. Bize sağladığı bileşenler ( components ) önemlidir. Bu yazıya geldiyseniz eğer, zâten Form App açmayı biliyorsunuzdur. Ama zâten Visual Studio ’yu indirdikten sonra, Windows Form App ’i seçip, Next ’e basıp oluşturun. Form oluşturma örneği. (Görsel, I.) Bir form örneği görelim: Yeni oluşturulmuş örnek bir form görseli. (Görsel, II) Şimdi en önemli menüleri göreceğiz: Araçlar ( Toolbox ): Bileşenleri barındırır. UI Component ları ( Görünüm Bileşenleri ), formumuza sürekleyip koyarız. Ve Özellikler penceresinden değiştiririz. Kabaca en güzel anlatım budur. Haricî kütüphaneleri de buraya ekler ve erişirsiniz. Özellikler ( Properties ): Bu pencere’de, form ayarlarını ve eklediğimiz bileşenlerin özelliklerini değiştirebiliyoruz. Çözüm Gezgini ( Solution Explorer ): Proje dosyalarını buradan görürüz. Siler, taşır, oluşturur ve yeniden adlandırırız. Proje de kullanılan haricî kütüphaneleri de ...

Filistin’in iki yüzü: PKK ve ASALA

  Filistin’in iki yüzü: PKK ve ASALA Diyeceksiniz ki: “ Ama insanlar ölüyor, yazık değil mi! Ne acımasızsın! ” falan filan.. Hayır efendim, hayır! Elbette çocukların ölmesine üzülüyorum, bende bir insanım lâkin FKÖ’nün eğittiği PKK’nın kaç Türk çocuğunun canını aldığını ez mi geçiceğiz? Burada Suriye’nin PKK’ya verdiği desteği yazmayacağım çünkü zâten blogu’mda “ Sosyalist Bedevî: Esad ailesi, atalarının izinde ” diye bir yazı yazıp detaylıca anlatmıştım. Ayrıca FKÖ’nün kurucularından ve Filistin devlet başkanı Mahmut Abbas hakkında da burada bahsetmeyeceğiz. Çünkü daha önce bahsetmiştik, bakınız: “ Solcu bir Bedevî: Mahmud Abbas ” Gelgelelim, Filistin ve PKK ilişkilerine, şöyle anlatayım: PKK, Suriye-Filistin-Lübnan kampların’da eğitim görmüştü. PKK, Suriye Hükûmeti tarafından Bekaa Vadisi’ne yerleştirilmişti. Burada yetişmişler burada militanlaşmışlardı. Bizzat büyük Türkiye dostu (!) Yaser Arafat tarafından desteklenmişlerdi. (1) İsrail’e karşı operasyonlar da kullanılmışla...