Kohana ve ORM

Tarih: Temmuz 13th, 2010 | Yazar: | Kategori: Php | Etiketler: , , , , , , , , , , , | 3 Yorum »

MVC ve Framework lerin en önemli özelliklerinden birisi de çoklu sınıfları tek bir şekilde toplayarak projemiz üzerinde dağınıklığı ortadan kaldırmaktır. Dikkat ederseniz zaten MVC modeli de bunun üzerine kurulmuştur. Kohana oldukça basit yapılı fakat bize istenilen her konu da rahatça yardım edebiliyor. Bunların içerisinde bir veritabanı modeli olan ORM de dahil.

ORM yani Object Relational Mapping isminden de belli olduğu gibi veritabanımıza bir harita çıkararak, ayrı bir sistemi nesnel hale getiriyor. Daha açık konuşmak gerekirse veritabanımızı obje halinde kullanmamızı, nesnel olarak yönetilebilmesini ve ulaşılabilmesine olanak sağlıyor. Alışılagelmiş ve dahili Php fonksiyonlarında, veritabanına bağlanarak, sql sorguları ile işlem yaparız. Ve bunların hepsi, karşı tarafta çalışır. Fakat ORM tekniğinde, karşı taraf nesne sınıfı haline getirilerek Php içerisinde kontrol ediliyor.

ORM Nedir?

Bahsettiğimiz gibi Kohana, ORM hakkında bize oldukça yardımcı oluyor. Dahili bir ORM modülü var. Bizim yazmamız gereken tüm kodları kendisi üretip, işlemi de kendisi yapıyor. Kısaca sistemini anlamak gerekirse;

ORM

Urunler isimi bir tablomuz var. Altında da isim ve fiyat olsun. Bunu tablolarımız birer sınıf, satırları ise objeye şeklinde nesnel hale çeviriyor. Sonrasında tıpkı sınıflar ile işlem yapar gibi rahatça yönetime kavuşuyoruz. Bunun için Kohana haricinde de pek çok sınıf ve araç var. Dahili veyahut sonradan adapte edilebilecek bu modüller yerine Framework kullanarak da rahatça ORM modelini kullanarabilirsiniz.

Yalnız bazı dezavantajları da var. Bunun en büyüğü küçük çaplı projelerde performans kaybına neden olması. Çünkü PHP-VERİTABANI yerine PHP-ORM-(HARİTA)-VERİTABANI şekline çevirmesi. Diğeri ise sağlam bir ORM modeli kullanmadınız sürece karmaşık işlerde biraz zorlanması. Çünkü sabit kodlar ürettiği için, sql sentaksına bizim kadar esnek uyamaz. Bir nevi kontrol bizden çıkıyor. Fakat gitgide çözülen bu problem de Kohana için büyük bir önem teşkil etmiyor.

Kohana ve ORM

ORM 2

ORM veritabanı yani veriler ile uğraştığı için yeri de model kısmında oluyor. Controller sınıfı altından çağırılarak işlemlerimizi gerçekleştiriyoruz. Tüm kodları tekrar baştan yazmak yerine Kohana 3 ile Telefon Defteri makalesini okursanız ve kodları yerli yerine oturtursanız çok daha iyi olacak. Çünkü oradaki uygulamamız üzerinden gideceğiz.

ORM modülünün yüklenmesi

Tıpkı diğer makale de veritabanı modülünü yüklediğimiz gibi bu işlemde de ORM modülünü yüklememiz gerekiyor. application klasörü altındaki bootstrap.php dosyasını açıp;

//'orm'        => MODPATH.'orm',        // Object Relationship Mapping

satırını açar ve kayıt ederseniz, modülümüzü yüklemiş oluruz.

Controller Sınıfının değişiklikleri (application\classes\controller)

Diğer makale de modelimize bağlanmış ve kendi yazdığımız fonksiyonları kullanmıştık. Şimdi ise ORM sınıfımıza bağlanıcaz ve işlemlerimizi yapıcaz. Öncelikle sınıf için yeni kodlarımız;

class Controller_Ornek extends Controller {

	private $view;
	private $orm;

	public function __construct(Request $request)
    {
        parent::__construct($request);

		$this->view = View::factory('ornek_wi');
		$this->orm = ORM::factory('orm');
    }

	public function action_index()
	{
		 $liste = $this->orm->find_all()->as_array();
		 $this->view->bind("liste",$liste);

		 $this->request->response = $this->view->render();
	}

	public function action_ekle()
	{
		$this->orm->values($_POST);
		$this->orm->save();

		$this->request->redirect(Url::base());
	}

	public function action_sil()
	{
		foreach($_POST["boxs"] as $d=>$t) {
			$this->orm->id = $t;
			$this->orm->delete();
		}

		$this->request->redirect(Url::base());
	}
}

ORM sınıfımızı tıpkı View gibi çağırıyoruz ve global değişkene atıyoruz. Daha sonrasında direkt ORM fonksiyonları sayesinde array şeklinde (sdclass şeklinde çekiliyor, çünkü veritabanımızı aynen getiriyor) verilerimizi alıp, view e atıyoruz ve ekrana basıyoruz.

Ekle altında ise yine ORM nin dahili fonksiyonuna değerlerimizi yolluyoruz ve tek bir fonksiyon save() diyerek veritabanına kaydını gerçekleştiriyoruz.

Diğerinde ise gelen verileri, birden fazla olabilir diye foreach döngüsüne alıp, hangi where verisine göre sileceğimizi beliriyoruz. Gördüğünüz gibi id satırını seçici yapmış ve onun verisini vermişiz. Ardından ise gene tek bir fonksiyon delete(); ile siliyoruz.

Her iki fonksiyon sonusunda da index actionunu çalıştırıyoruz.

ORM Model Sınıfını Oluşturmak (application\classes\model)

Öncelikle belirtilen klasöre orm.php isimli bir dosya oluşturalım ve içerisine şu kodları ekleyip, kayıt edelim;

<?php defined('SYSPATH') or die('No direct script access.');

class Model_Orm extends ORM {

    protected $_db = 'default';
    protected $_table_name  = 'isimler';

    protected $_table_columns = array(
        'id'   => array('data_type' => 'int',    'is_nullable' => FALSE),
        'isim'   => array('data_type' => 'string',    'is_nullable' => FALSE),
        'tel'  => array('data_type' => 'string', 'is_nullable' => TRUE),
    );
}

Burada modelimizi, direkt model yerine ORM sınıfına bağlıyoruz. Aslında bu dosya bir nevi config yani ayarlar dosyası görevi görüyor. Daha önceden database ayarlarımızı yaptığımız için bağlanacağımız veritabanı adını default olarak veriyoruz. Daha sonrasında tablo adımızı ve tablo altındaki sütunlarımızı tanımlıyoruz. Bu kısım sadece bu kadardan ibaret olarak kalıyor.

İsterseniz dahili validation (doğrulama) sınıfı kullanmak için yeni ayarlar da tanımlayabilirsiniz ($_rules).

Herşey doğru gittiyse, diğer uygulamamız gibi bunu da çalıştıralım. Eğer ki foreach döngüsü hata verirse, veritabanından birkaç veri ekleyebilirsiniz. Bunun dışında sorunsuz bir ORM destekli Telefon Defterimiz olacaktır.

Herkese iyi günler, iyi çalışmalar.




Benzer Yazılar;

coded by nessus

“Kohana ve ORM” yazısında 3 Ahkam var.

  1. 1 Yusuf 02:15 on Temmuz 14th, 2010 anında kesmiş:

    Hoş bir yazı olmuş teşekkürler.

  2. 2 kadir 13:12 on Eylül 11th, 2010 anında kesmiş:

    Çok güzel anlatmışsın Ellerine Sağlık ;)

  3. 3 kayzen 14:43 on Ekim 29th, 2010 anında kesmiş:

    Çocuk sen daha ne kadar gelişeceksin el altmadıgın bir sistem kaldımı


Ahkam Kesme Aparatı

  • *