Node.JS

TypeORM Tablolar Arası Bağlantı Oluşturma

Herkese merhaba, NodeJS yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda TypeORM ile veritabanındaki tablolar arasında bağlantı kurmayı anlatacağım. Hadi başlayalım !

Tablolar Arası Bağlantı Çeşitleri

TypeORM, ilişkili verilerin yönetimi için oldukça kullanışlı bir ORM (Object Relational Mapping) aracıdır. TypeORM kullanarak tablolar arasında ilişki kurmanın birkaç farklı yolu vardır. Bunlar:

  • One-to-One (Bire-Bir): İki tablo arasında tek bir eşleştirme yapılır.
  • One-to-Many (Birden-Çoka): Birinci tablo birincil anahtarını içerir, ikinci tablo birincil anahtarın birincil anahtarın referansıdır.
  • Many-to-One (Çoktan-Bire): İlk tablo birincil anahtarının referansını içerir, ikinci tablo ise birincil anahtarın kendisini içerir.
  • Many-to-Many (Çoktan-Çoka): İki tablo arasında bir ara tablo kullanılarak birincil anahtarlar arasında çoklu eşleştirme yapılır.

Bu örneklerin hepsini aşağıda detaylı bir şekilde açıklayacağım ve her biri için TypeORM ile nasıl ilişki kurabileceğimizi göstereceğim.

Örnek veri olarak, bir kitap mağazası uygulamasında kullanılabilecek iki tablo oluşturacağım: Kitaplar ve Yazarlar. İlişki, bir kitabın yalnızca bir yazar tarafından yazılabileceği bir bir-bire ilişki olacaktır.

Veritabanına Bağlanma

İlk olarak, TypeORM’ü projenize yüklemeniz gerekiyor. Daha sonra, bir bağlantı oluşturmak için TypeORM’ün createConnection fonksiyonunu kullanabilirsiniz.

import { createConnection } from 'typeorm';

createConnection({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'password',
  database: 'bookstore',
  entities: [__dirname + '/entities/*.entity{.ts,.js}'],
  synchronize: true,
}).then(() => console.log('Connected to database'));

Birinci Tablonun Oluşturulması

Bu bağlantıyı oluşturduktan sonra, birincil tablomuzu oluşturabiliriz: Author (Yazar).

import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class Author {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;
}

İkinci Tablonun Oluşturulması

İkinci tablomuz ise Book (Kitap) tablosu olacaktır.

import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
import { Author } from './author.entity';

@Entity()
export class Book {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @ManyToOne(() => Author, (author) => author.books)
  author: Author;
}

Gördüğünüz gibi, Book tablosu bir yazarı referans alıyor. Bu referansı oluşturmak için ManyToOne dekoratörünü kullanıyoruz. Bu dekoratör, Author sınıfını ve bir yazarın birden çok kitabı olabileceği bir books özelliğine sahip olduğunu belirtiyor.

İlişkiyi Veritabanına Yansıtma

Şimdi, oluşturduğumuz bu ilişkiyi veritabanına yansıtmak için TypeORM’ün synchronize özelliğini kullanabiliriz. Bu özellik, veritabanındaki şemayı otomatik olarak senkronize eder. Bu, projeyi her başlattığınızda veritabanını elle güncelleme ihtiyacını ortadan kaldırır.

createConnection({
  // Diğer özellikler buraya gelecek
  synchronize: true,
})

Yeni Veri Oluşturma

İlişki artık oluşturuldu ve veritabanında senkronize edildi. Şimdi bir kitap ve bir yazar ekleyelim ve bu ilişkiyi nasıl kullanabileceğimize bakalım.

// Yeni bir yazar oluşturma
const author = new Author();
author.name = 'J.K. Rowling';

// Yeni bir kitap oluşturma
const book = new Book();
book.title = 'Harry Potter and the Philosopher\'s Stone';
book.author = author;

// Veritabanına yazar ve kitabı ekleme
await connection.manager.save(author);
await connection.manager.save(book);

// Veritabanından tüm kitapları almak ve yazarlarını da getirmek
const books = await connection.manager.find(Book, { relations: ['author'] });

Gördüğünüz gibi, Book sınıfındaki author özelliği Author sınıfından bir örnek olarak atanıyor. Daha sonra, hem yazarı hem de kitabı veritabanına kaydediyoruz. Son olarak, tüm kitapları alırken relations özelliğini kullanarak yazarlarını da getiriyoruz.

Bu, bir-bire ilişkinin basit bir örneğidir. Diğer ilişki türleri de benzer şekilde oluşturulabilir, ancak farklılıkları olacaktır.

OneToMany Örneği

Örneğin, bir bir-çok ilişki oluşturmak için OneToMany dekoratörünü kullanabilirsiniz. Bu dekoratör, bir tablonun birincil anahtarının referansını içerirken, diğer tablo birincil anahtarın kendisini içerir. Aşağıdaki örnek, bir yazarın birden çok kitabı olduğu bir senaryoyu ele alır:

@Entity()
export class Author {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @OneToMany(() => Book, (book) => book.author)
  books: Book[];
}

Gördüğünüz gibi, Author sınıfı artık books adında bir özellik içeriyor ve OneToMany dekoratörü kullanılarak Book sınıfına referans veriliyor. Bu dekoratör, ikinci argüman olarak, bu ilişkinin ters yönlendirilmesi için kullanılır.

ManyToMany Örneği

ManyToMany ilişkileri de @ManyToMany dekoratörü kullanılarak oluşturulabilir. Bu dekoratör, JoinTable dekoratörü ile birlikte kullanılır ve iki tablo arasında bir bağlantı tablosu oluşturur. Aşağıdaki örnek, bir kitabın birden fazla yazarı olabileceği bir senaryoyu ele alır:

@Entity()
export class Book {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @ManyToMany(() => Author, (author) => author.books)
  @JoinTable()
  authors: Author[];
}

@Entity()
export class Author {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @ManyToMany(() => Book, (book) => book.authors)
  books: Book[];
}

Gördüğünüz gibi, Book sınıfı artık authors adında bir özellik içeriyor ve ManyToMany dekoratörü kullanılarak Author sınıfına referans veriliyor. JoinTable dekoratörü de kullanılarak iki tablo arasında bir bağlantı tablosu oluşturulur.

Sonuç

Bu örneklerin hepsi, TypeORM kullanarak tablolar arasında ilişki kurmanın nasıl yapılabileceğini göstermektedir. NestJS kullanmadan yapmanın farkı, NestJS’in TypeORM için sağladığı bazı hazır işlevlerdir. Bunlar arasında, @InjectRepository() dekoratörü, veritabanı işlemlerinde kullanılacak depolama servislerini enjekte etmek için kullanılır ve TypeOrmModule modülü, veritabanı bağlantısı yapılandırma ve yönetimini kolaylaştırır.

Evet TypeORM ile veritabanındaki tablolar arasında bağlantı kurma bu şekilde yapılmakta. Tüm NodeJS yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu