mavisland / orm
A lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP.
Requires
- php: >=7.4
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Bu sınıf, saf PHP ile yazılmış, framework bağımsız, sade ama güçlü bir ORM yapısıdır. PDO kullanır, Singleton deseniyle bağlantıyı tek seferde kurar ve Laravel benzeri kullanım kolaylığı sunar.
🚀 Özellikler
✅ PDO ile güvenli bağlantı
✅ Singleton bağlantı (tek sefer açılır)
✅ define() ile kolay yapılandırma
✅ Kolon seçimi, where(), join(), groupBy() gibi SQL kolaylıkları
✅ save(), delete(), softDelete() ve restore() gibi model işlemleri
✅ fillable, guarded ile güvenli veri setleme
✅ validate() ile model bazlı doğrulama
✅ hasMany, belongsTo, with() ile ilişkiler
✅ toArray(), toJson() dönüşümleri
✅ Sayfalama (paginate())
⚙️ Kurulum
1. Veritabanı Yapılandırması
config.php gibi bir dosyada tanımlayın:
<?php define('DB_HOST', 'localhost'); define('DB_NAME', 'veritabani'); define('DB_CHARSET', 'utf8mb4'); define('DB_USER', 'root'); define('DB_PASS', '');
2. ORM Sınıfını Dahil Et
require 'config.php'; require 'Orm.php';
🔧 Kullanım
✅ Model Tanımı
Her modelin kendi sınıfı olmalı. Örneğin:
class Kullanici extends Orm { protected $fillable = ['ad', 'email']; protected $tablo = 'kullanicilar'; }
Not: Alternatif olarak constructor ile tablo adı da verilebilir:
new Orm('kullanicilar')
📄 Kayıt Listeleme
$kullanici = new Kullanici(); $veriler = $kullanici->where('aktif', 1)->orderBy('id', 'DESC')->get();
👤 Tek Kayıt
$kullanici = (new Kullanici())->find(1);
➕ Yeni Kayıt
$k = new Kullanici(); $k->fill([ 'ad' => 'Tanju', 'email' => 'tanju@example.com' ]); $k->save();
✏️ Güncelleme
$k = (new Kullanici())->find(1); $k->email = 'yeni@example.com'; $k->save();
❌ Silme / Soft Delete
$k = (new Kullanici())->find(1); $k->delete(); // softDelete() özelliği açıksa deleted_at kolonunu günceller
🔁 İlişkiler
hasMany:
class Kullanici extends Orm { public function yazilar() { return $this->hasMany(Yazi::class, 'kullanici_id'); } }
belongsTo:
class Yazi extends Orm { public function yazar() { return $this->belongsTo(Kullanici::class, 'kullanici_id'); } }
Eager Loading:
$veriler = (new Yazi())->with('yazar')->get();
✅ Doğrulama (Validation)
class Kullanici extends Orm { protected $rules = [ 'ad' => ['required', 'min:3'], 'email' => ['required', 'email', 'unique'] ]; }
$k = new Kullanici(); $k->fill($_POST); if ($k->validate()) { $k->save(); } else { print_r($k->getErrors()); }
🔄 Dönüştürmeler
$k = (new Kullanici())->find(1); $array = $k->toArray(); $json = $k->toJson();
📄 Sayfalama
$k = new Kullanici(); $sonuc = $k->where('aktif', 1)->paginate(2, 10); // 2. sayfadan 10 kayıt getir // $sonuc['data'], $sonuc['toplam'], $sonuc['sayfa_sayisi'] vs.
🎯 Notlar
- Her model sınıfı
Ormsınıfından türetilmeli - Model başında tablo adı belirtebilir ya da constructor'da verebilirsin
softDelete,timestamps,fillable,guardedgibi özellikler model özelinde açılıp kapatılabilir
💬 Katkıda Bulunmak
Bu ORM sınıfı, sade projeler için ideal bir başlangıçtır. Pull request veya issue ile katkıda bulunmaktan çekinme! 🙌
🪪 Lisans
MIT License