Skip to content

RadKod/eloquent-orm

Repository files navigation

Mini PHP ORM

Laravel Eloquent tarzı hafif ORM kütüphanesi. PHP 8+ ve MySQL için tasarlandı.

Kurulum

Docker ile (Önerilen)

# Veritabanını başlat
docker-compose up -d

# Tabloları oluştur
mysql -h127.0.0.1 -P3306 -uroot -proot eloquent_orm < sql/init.sql

Manuel Kurulum

# MySQL'de veritabanı oluştur
CREATE DATABASE eloquent_orm CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

# Tabloları import et
mysql -u root -p eloquent_orm < sql/init.sql

# .env dosyasını ayarla
cp .env.example .env

Konfigürasyon

.env dosyasını düzenle:

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=eloquent_orm
DB_USERNAME=root
DB_PASSWORD=root
DB_CHARSET=utf8mb4

Kullanım

Temel CRUD

require_once 'orm/Database.php';
require_once 'orm/QueryBuilder.php';
require_once 'orm/Model.php';
require_once 'orm/Models/User.php';

// Oluştur
$user = User::create([
    'name' => 'Ali Veli',
    'email' => 'ali@example.com',
    'age' => 25
]);

// Bul
$user = User::find(1);

// Güncelle
$user->name = 'Yeni İsim';
$user->save();

// Sil
$user->delete();

Sorgu Oluşturucu

// Basit sorgular
$users = User::where('status', 'active')->get();
$count = User::where('age', '>', 18)->count();
$first = User::where('email', 'test@example.com')->first();

// Karmaşık sorgular
$users = User::where('status', 'active')
             ->where('age', '>', 18)
             ->orderBy('name')
             ->limit(10)
             ->get();

İlişkiler

// User modelinde
public function posts(): array
{
    return $this->hasMany(Post::class, 'user_id');
}

public function profile(): ?Model
{
    return $this->hasOne(Profile::class, 'user_id');
}

// Kullanım
$user = User::find(1);
$posts = $user->posts();
$profile = $user->profile();

Scope'lar

// User modelinde
public static function active(): QueryBuilder
{
    return static::where('status', 'active');
}

// Kullanım
$activeUsers = User::active()->get();

Test

Docker ile Test

# Test veritabanını hazırla
mysql -h127.0.0.1 -P3306 -uroot -proot -e "CREATE DATABASE IF NOT EXISTS eloquent_orm_test"

# Testleri çalıştır
./vendor/bin/phpunit tests/

Manuel Test

# Test veritabanını oluştur
CREATE DATABASE eloquent_orm_test;

# Composer bağımlılıklarını yükle
composer install

# Testleri çalıştır
composer test

Örnek Çalıştırma

# Tüm özellikleri test et
php example.php

Proje Yapısı

orm/
├── Database.php        # Veritabanı bağlantısı
├── QueryBuilder.php    # SQL sorgu oluşturucu
├── Model.php          # Temel model sınıfı
└── Models/            # Model sınıfları
    ├── User.php
    ├── Post.php
    ├── Profile.php
    └── ...
sql/
└── init.sql           # Veritabanı şeması
tests/
└── ModelTest.php      # Unit testler

Özellikler

  • ✅ CRUD işlemleri
  • ✅ Akıcı sorgu oluşturucu
  • ✅ Model ilişkileri (hasOne, hasMany, belongsTo, belongsToMany)
  • ✅ Prepared statements (SQL injection koruması)
  • ✅ Model scope'ları
  • ✅ Array/JSON dönüştürme
  • ✅ Unit testler
  • ✅ UTF8MB4 charset desteği

About

Laravel Eloquent’e benzer API sunan, PHP 8+ ve MySQL uyumlu, sade ve hafif ORM kütüphanesi. Model ilişkileri, akıcı sorgular, scope’lar, prepared statement ile güvenlik ve birim test desteği bulunur.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages