mavisland / orm
A lightweight nearly-zero-configuration object-relational mapper and fluent query builder for PHP.
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/mavisland/orm
Requires
- php: >=7.4
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