Blog
Implementasi ActiveRecord pada PHP 5.3 – (bag I)
Active record adalah salah satu pendekatan untuk membaca data dari sebuah basis data. Sebuah tabel atau view dibungkus ke dalam sebuah kelas sedemikian sehingga sebuah instansi obyek terikat dengan satu baris tunggal dalam tabel. Setelah obyek dibuat, sebuah baris baru ditambahkan pada tabel pada saat disimpan. Obyek-obyek yang dimuat mendapatkan informasi tentang dirinya dari basis data; ketika sebuah obyek diubah, baris yang berkaitan dalam tabel juga diubah. Kelas pembungkus mengimplementasikan metode-metode aksesor untuk setiap kolom di dalam tabel atau view. (wikipedia)
Pattern ActiveRecord pertama kali di perkenalkan pada framework Ruby berbasis web, yakni RubyOnRails. Setelah itu, mulai banyak framework php yang mengikuti pattern ini, contohnya adalah Akelos dan CakePHP, tapi sayangnya karena berbekal PHP 4, maka terasa fitur tersebut agak di paksakan, sehingga code yang di hasilkan terasa kurang cantik. Tapi setelah di rilisnya PHP versi 5.3, maka sepertinya pattern ini bisa di implementasikan menjadi lebih dengan berkat di perbaikinya fitur static binding, yang oleh orang php di beri nama “Late Static Binding”.
Setiap table pada database memiliki sebuah Class, dan setiap record dari table memiliki sebuah object. Untuk lebih jelasnya, perhatikan contoh berikut:
[ruby]
# pendefinisian activerecord
class User < ActiveRecord::Base
end
# menambahkan data baru
user = User.new
user.nama = ‘Seorang’
user.email = ‘seorang@orang.com’
user.save
#memperbaharui data
user = User.find(2) # mengambil user dengan ID 2
user.nama = ‘Siapa aja’
user.save
[/ruby]
Diatas terdapat sebuah class User yang di inherence dari Class ActiveRecord::Base, class User memiliki sebuah table untuk menyimpan setiap object yang merupakan instance dari class User. Pada di atas, class User memiliki dynamic atribut berupa nama dan email, yang berarti pada table di database juga memiliki field nama dan email.
Jika di implentasikan dalam PHP, code di atas berharap dapat di tuliskan seperti berikut:
Kira-kira contoh verbose ketika mendefinikasannya nya adalah sebagai berikut:
[php]
<?php
class User extends ActiveRecord
{
static $table = ‘user’;
static $primarykey = ‘id’;
static $hasMany = array(
‘posts’ => array(‘class’ => ‘Post’,'foreignKey’ => ‘user_id’),
‘roles’ => array(‘class’ => ‘Role’, ‘foreignKey’ => ‘user_id’,'assosiationForeignKey’ => ‘role_id’,'joinTable’ => ‘user_role’)
);
static $hasOne = array(
‘profile’ => array(‘class’ => ‘Profile’, ‘foreignKey’ => ‘user_id’)
);
static $belongsTo = array(
‘group’ => array(‘class’ => ‘UserGroup’,'foreignKey’ => ‘group_id’)
);
}
[/php]
Dan code di atas dapat di singkat menjadi:
[php]
class User extends ActiveRecord
{
static $hasMany = array(
‘posts’ => array(‘class’ => ‘Post’),
‘roles’ => array(‘class’ => ‘Role’,'joinTable’ => ‘user_role’)
);
static $hasOne = array(
‘profile’ => array(‘class’ => ‘Profile’)
);
static $belongsTo = array(
‘group’ => array(‘class’ => ‘UserGroup’)
);
}
[/php]
Dan tentunya seperti yang saya sebutkan di atas, setiap class memili sebuah table, maka contoh table untuk class User adalah:
[sql]
CREATE TABLE user(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
group_id INTEGER
);
[/sql]
Dan berikut Adalah contoh operasi penggunaannya
[php]
<?php
// menambahkan data
$user = new User();
$user->name = ‘Seseorang’;
$user->email = ‘seorang@orang.com’;
$user->save();
// memperbaharui data
$user = User::find(2);// mengambil data dengan id =2
$user->name = ‘Seseorang Lagi’;
$user->save();// menyimpanya kembali
// Retrieving data
$users = User::all();
foreach($users as $user){
echo ‘nama: ‘. $user->name .’<br/>’;
echo ‘email: ‘. $user->name .’<br/>’;
echo ‘group: ‘. $user->group->name . ‘<br/>’; // relasi ‘belongsTo’
echo ‘address: ‘. $user->profile->address . ‘<br/>’; // relasi ‘hasOne’
echo ‘posts: <br/>’;
foreach($user->posts as $post){//relasi ‘hasMany’
echo ‘ title’ . $post->title . ‘<br/>’;
echo ‘ content’ . $post->content . ‘<br/>’;
}
}
[/php]
dari snippet code di atas, mari kita sedikit mendefinisikan code yang akan kita bangun. di Active Record paling kita memerlukan beberapa garis besar kemampuan:
- Kemampuan mengolah data dari database (insert, update, delete)
- Kemampuan merelasikan data dan memappingnya ke dalam object
Comments
There are no comments yet.