Tutorial ORM dan PHP Active Record

Tutorial ini adalah bagian 3 tutorial sebelumnya yang membahas teknik koneksi database dan Operasi CRUD dasar. Mengingat ORM ini adalah teknik baru dan agar tutorial ini bisa digunakan secara independen tanpa membaca 3 artikel selanjutnya maka saya akan menampilkan kembali struktur tabel, struktur project dan tampilan UInya. Perbedaan mendasar antara teknik ORM denga teknik sebelumnya, disini anda tidak perlu melakukan query secara manual.

Sebelum lebih jauh, silahkan anda baca konsep Active Record dan ORM di website Wikipedia untuk melihat gambaran ORM dan website phpactiverecord.org untuk mengetahui cara kerja Active Record. Konsep ORM pertama kali dipopulerkan oleh hibernate dan Active record diadopsi dari RUby on Rail.

Catatan lain disini, PHP active record (ORM) ini memanfaatkan driver PDO, artinya teknik ini bisa dipakai disembarang database DENGAN SYARAT databasenya didukung oleh PHP. Selain librari ini, sebenarnya library ORM di PHP sangat banyak seperti contohnya Propel, doctrine dan redbeanPHP. Saya memilih menggunakan Active record karena librarinya kecil, mudah dipahami dan powerful.

Rancangan Tabel kampus

CREATE TABLE IF NOT EXISTS `kampus` (
  `idkampus` int(11) NOT NULL AUTO_INCREMENT,
  `nama` varchar(50) NOT NULL,
  `alamat` varchar(100) NOT NULL,
  PRIMARY KEY (`idkampus`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 ;

Struktur File project

|   index.php
|
+---assets
|   +---css
|   +---fonts
|   +---js        
+---inc
|       config.php
+--- ORM Lib
    +--ActiveRecord.php
+---model
    +----kampus.php
|
+---kampus
        kampus_action.php
        kampus_form.php
        kampus_view.php

Jika dibandingkan dengan Tutorial sebelumnya, tampak perbedaannya ada pada file ActiveRecord.php dan folder ORMlib yang berisi file library PHP untuk mendukung operasi database menggunakan teknik ORM. Perbedaan selanjutnya ada folder baru dengan nama model dengan isinya file kampus.php. Catatan disini, karena tabel kita cuma satu, maka modelnya cuma satu, namun jika kita punya banyak tabel maka isi model ini juga akan sebanyak tabelnya.

Tampilan Web

tampilancrud

Code Program

model data

ORM memetakan struktur database relasional menjadi Object. Tujuannya agar database bisa dengan mudah dimanipulasi dengan style OOP. PHP active record sendiri adalah library yang menekankan pada kemudahan dan konvensi penulisan kode. Salah satu konvensinya adalah setiap primary key harus diberi nama id dengan tipe integer auto increment. Namun klo kia analisa tabel kita tidak mengikuti konvensi yang ditetapkan oleh librari ini. Solusinya? buat konfigurasi didalam kelas kampus.php

class Kampus extends ActiveRecord\Model {
	 static $table_name = 'kampus';
 
    # explicit pk since our pk is not "id" 
    static $primary_key = 'idkampus';
  
}

Koneksi database

ActiveRecord\Config::initialize(function($cfg)
{
    $cfg->set_model_directory('model');
    $cfg->set_connections(array('development' => 'mysql://root:@127.0.0.1/candralab'));
});

Tampil data

  $kampus=new Kampus();
 $data=$kampus->find('all');
foreach ($data as $kampus) { 
echo $kampus->nama;
echo $kampus->alamat;
}

Kode diatas sama fungsinya dengan query select * from kampus . Fungsi $kampus->find('all') adalah fungsi bawaan dari ORM untuk menampilkan seluruh data di tabel. Fungsi lain bisa anda baca di http://www.phpactiverecord.org/projects/main/wiki/Finders

Insert data

	$kampus = new Kampus();
	$kampus -> nama = $_POST['nama'];
	$kampus -> alamat = $_POST['alamat'];
	$kampus -> save();

update data

$kampus = Kampus::find($id);
	$kampus -> nama = $_POST['nama'];
	$kampus -> alamat = $_POST['alamat'];
	$kampus -> save();

delete data

    $kampus = Kampus::find($id);
    $result = $kampus -> delete();

Perhatikan sekali lagi, ORM merevolusi cara kita berinteraksi dengan database, dengan ORM tidak perlu lagi query manual. Ingat! tutorial ini hanya pengantar singkat (quick star) dari PHP ORM. Jika anda ingin mempelajari lebih lanjut silahkan berkunjung ke websitenya di http://www.phpactiverecord.org.

Download source code

DOWNLOAD DISINI. Source code ini mencakup 3 tutorial sebelumnya. Untuk cara instalasi dan setingnya di komputer lokal, silahkan baca file README.txt.

Pemrograman Database PHP dengan PDO

Ini adalah tutorial ketiga dari empat tutorial yang membahas tentang teknik koneksi database di PHP. Teknik sebelumnya telah membahas tentang teknik PHP MYSQL klasik dan teknik menggunakan MYSQLi. Pertanyaannya adalah, bagaimana kalau website yang akan kita bagun, ingin migrasi database ke oracle atau ke vendor selain mySQL?.

PDO adalah penyelamat anda. Pernahkah anda berpikir bagaimana CMS dan PHP framework bisa mendukung multiple database hanya dengan mengubah konfigurasinya? Itu karena CMS dan PHP framework itu menggunakan PDO. Biasanya CMS yang memakai PDO minimal menawarkan akses mySQL,SQLite, Postgres dan Oracle. Dengan PDO, jika kita pindah database (secara teori) kita hanya mengubah konfigurasi saja tanpa harus susah payah mengganti kode satu satu di ratusan file PHP yang kita punya. Gimana, keren ga?

Untuk tampilan, rancangan table serta struktur project masih sama dengan tutorial pertama. Bagian ini fokus pada cara mendeteksi Apakah PDO disupport oleh Server anda dan sample code CRUDnya saja.

Cara mendeteksi PDO

cara termudah untuk mendeteksi support PDO adalah menggunakan script ini


print_r(PDO::getAvailableDrivers());

Cara yang lebih mudah, gunakan phpinfo(). Berikut ini contoh tampilan support PDO di XAMPP.

Dukungan PDO SQlite dan MYSQL di PHP
Dukungan PDO SQlite dan MYSQL di PHP

Sample kode

Sample ini menggunakan driver PDO MySQL dan menggunakan teknik name paramater.

Koneksi

//koneksi MYSQL dengan PDO
$db=new PDO('mysql:host=localhost;dbname=candralab;charset=utf8','root','');

//contoh kalo postgresql
//$db=new PDO('pgsql:host=namaserverorIP;dbname=namadatabase;charset=utf8','usernamedb','passworddb');

tampil

        $sql="select * from kampus ";
         $stmt=$db->query($sql);
         while($kampus=$stmt->fetch(PDO::FETCH_OBJ)){
        echo $kampus->nama;
        echo $kampus->alamat;
      } 


insert

	$sql = "INSERT INTO kampus(nama,alamat)
		VALUES(?,?)";

	 $stmt=$db->prepare($sql);
   $result=$stmt->execute(array($nama,$alamat));
	

Update

$sql = "update kampus set nama=?,
    alamat=?
    where idkampus=?";
	 $stmt=$db->prepare($sql);
   $result=$stmt->execute(array($nama,$alamat,$id));

Delete

	$sql = "delete from kampus
    where idkampus=?";
       $stmt=$db->prepare($sql);
   $result=$stmt->execute(array($id));

Setelah kita tahu manfaat PDO, apakah ada cara yang lebih mudah,kode lebih pendek dan query secara default aman dari SQL injection? Jika anda menjawab dengan PHP framework, anda benar tapi kurang akurat. Lebih tepat Gunakan ORM. Makanan apa lagi ini? cek tutorial ORM dengan PHP Active Record di artikelselanjutnya. ORM merubah total teknik query database dan menhemat waktu coding secara significant.