Pada Yii Framework dikenal Active Record yang digunakan untuk
mempermudah aplikasi berinteraksi dengan database. Yii sendiri sudah
cukup jelas memaparkan penggunaan active record pada Yii Framework disini.
Tapi saya akan ulas kembali lebih detail beberapa hal terkait cara
penggunaan Yii Framework sendiri pada sebuah aplikasi. Saya sendiri akan
membahas beberapa active record yang sangat sering saya gunakan dalam
pembuatan aplikasi, diantaranya sebagai berikut:
Misal saya memiliki sebuah database dengan tabel “biodata”. Tabel “biodata” sendiri memiliki attribute sebagai berikut:
Misal saya memiliki sebuah database dengan tabel “biodata”. Tabel “biodata” sendiri memiliki attribute sebagai berikut:
- id : Primary Key, Integer, Auto Increment
- nama : varchar(100)
- alamat : text il
Tabel tersebut saya input data seperti berikut:
| id | nama | alamat |
| 1 | Joko | Palembang |
| 2 | Ali | Jakarta |
| 3 | Joko | Papua |
| 4 | Mahmud | Palembang |
| 5 | Ga tahu | Ga tahu juga |
- FindByPk() : Digunakan untuk menemukan data yang memiliki Primary Key tertentu.
contoh penggunaan :
$itu=Biodata::model()->findByPk(2);Code di atas akan mengembalikan sebuah nilai dari tabel biodata yang memiliki “id” 2. Untuk menampilkan hasil nya, anda dapat gunakan code seperti berikut:
echo $itu->id; (untuk menampilkan id nya) echo $itu->nama; (untuk menampilkan nama nya) echo $itu->alamat; (untuk menampilkan alamatnya)
- FindByAttributes(): Digunakan untuk menemukan data yang memiliki attribute tertentu.
contoh penggunaan :
$itu=Biodata::model()->findByAttributes(array('nama'=>'Ali')); atau bisa juga $itu=Biodata::model()->findByAttributes(array('nama'=>'Joko','alamat'=>'Palembang'));Sedangkan tata cara untuk menampilkannya sama saja dengan yang digunakan pada ‘findByPk()’
- FindAllByAttributes() : Digunakan untuk menemukan data yang memiliki attribute tertentu, tapi data yang di hasilkan lebih dari 1 row data.
contoh penggunaan :
$itu=Biodata::model()->findAllByAttributes(array('nama'=>'Joko'));Dari code di atas, akan dihasilkan 2 buah row data. Yaitu data dengan ‘id’ 1 dan 3, itu karena kedua nya memiliki ‘nama’ Joko. Karena data yang dihasilkan lebih dari 1, maka cara menampilkannya pun harus 1 per 1. Berikut tata cara untuk menampilkan data nya:
foreach($itu as $i=>$ii) { echo $ii->id; echo $ii->nama; echo $ii->alamat; }
- Menggunakan ‘scopes’
Penggunaan scopes digunakan saat kita membutuhkan sebuah query yang
sama berulang-ulang pada suatu aplikasi. Hal ini dimaksud untuk
mempermudah dan mempersingkat aktivitas coding kita :D. Contoh penggunaan :
public function scopes() { return array( 'panggilJoko'=>array( 'condition'=>'nama=Joko', 'limit'=>5, ), ); }
Letakkan kode di atas pada “model” bersangkutan. Kode tersebut jika
dipanggil akan menghasilkan semua data dengan nama “Joko” dimana
maksimal yang di tampilkan adalah 5 buah data. Berikut contoh code untuk
menggunakan fungsi tersebut dan menampilkan data yang dihasilkan dari
fungsi tersebut :
$itu=Biodata::model()->panggilJoko()->findAll(); //berikut untuk menampilkan nya foreach($itu as $i=>$ii) { echo $ii->id; echo $ii->nama; echo $ii->alamat; }
- Menggunakan ‘scopes’ dengan parameter
Pada fungsi yang ada di atas, kita memanggil sebuh query yang sudah
kita tetapkan kondisi nya. Misal ‘nama=Joko’, bagaimana bila kita ingin
membuat banyak kondisi dimana nama nya bisa kita ubah-ubah setiap saat
kita memanggil fungsi tersebut. Tentu kita harus mengubah fungsi
tersebut menjadi dinamis dengan cara memberikan parameter pada fungsi
tersebut. Berikut cara untuk menggunakannya:
Masukkan code berikut pada ‘model’ bersangkutan:
public function panggilSiapa($nama=Joko) { $this->getDbCriteria()->mergeWith(array( 'condition'=>'nama='.$nama, 'limit'=>4, )); return $this; }
Kode di atas akan mengembalikan semua data pada tabel biodata yang
memiliki nama sesuai dengan kita mau. Tapi bila kita tidak mengisi
parameter nama sesuai yang dimaksud, maka code tersebut akan
menghasilkan data yang memiliki nama “Joko”(default nya adalah “Joko”).
Berikut cara menggunakan fungsi tersebut beserta cara menampilkannya:
$itu=Biodata::model()->panggilSiapa()->findAll(); //mengembalikan semua data dengan nama Joko $itu=Biodata::model()->panggilSiapa('Ali')->findAll(); //mengembalikan semua data dengan nama AliSedangkan cara menampilkan data nya adalah sebagai berikut:
foreach($itu as $i=>$ii) { echo $ii->id; echo $ii->nama; echo $ii->alamat; }
Sebenarnya masih ada banyak Active Record yang tidak saya paparkan 1
per 1 disini, seperti findBySql,findAllBySql, dll.. Anda dapat menggali
sendiri penggunaan lainnya. Tapi 1 hal yang perlu anda ingat,
Penggunaan Active Record lebih lambat dari menggunakan SQL query secara langsung ke database. Hal ini sudah dijelaskan langsung dari Yii Framework disini.
Jadi tentukan kebutuhan anda sendiri kapan anda harus menggunakannya atau tidak…
Selamat mencoba…
Semoga membantu…. :D