Kita mengetahui bahwa dalam framework
Codeigniter memiliki library database untuk melakukan
perintah dalam mengeksekusi query ke database salah
satunya adalah Active Record. Disini akan membahas
tentang menggabungkan dan menggunakan Active Record ke dalam satu method atau fungsi. Active Record adalah suatu
pola yang memungkinkan mengambil informasi, memasukkan, dan memperbarui
data dari database dengan pengkodean/scripting seminimal mungkin. Dalam
beberapa kasus hanya satu atau dua baris kode yang diperlukan untuk melakukan
perintah ke database.
◦
Selecting Data : Adalah proses dalam pemilihan
data dari database, atau sama dengan membentuk pernyataan SQL SELECT serta
menjalankan querynya.
◦
Inserting Data : Akan menghasilkan string
insert berdasarkan data yang diberikan, dan menjalankan querynya. di sini kita
dapat menggunakan sebuah array atau obyek ke dalam fungsi.
◦
Updating Data : Akan menghasilkan string
update berdasarkan data yang diberikan, dan menjalankan querynya.
◦
Deleting Data : membentuk sebuah string
delete, dan menjalankan querynya.
◦
Method Chaining : Metode chaining memungkinkan
kita untuk menyederhanakan sintaks dengan menghubungkan beberapa fungsi
sekaligus. Contohnya $this->db->select(‘title’)->from(‘mytable’)->where(‘id’,
$id)->limit(10, 20);
◦
Active Record Caching : Digunakan
untuk melakukan “chace” pada query kita dan bisa digunakan untuk
proses berikutnya.
Dalam tutorial ini untuk nama model adalah Default_model,
sehingga nanti file PHP untuk modelnya adalah default_model.php, Nah berikut
salinan baris kode untuk model tersebut:
<?php
class Default_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
function getDataDB($tabel,$field = '*', $cond =
array(),$join = array(),$limit = array())
{
$this->db->select($field);
$this->db->from($tabel);
if(count($join) > 0) {
foreach ($join as $key =>
$val){
$this->db->join($key,$val,'left');
}
}
if(count($cond) > 0)
$this->db->where($cond);
if(count($limit) == 1)
$this->db->limit($limit[0]);
if(count($limit) == 2)
$this->db->limit($limit[0],$limit[1]);
return $this->db->get();
}
function getDataDB2($tabel,$config = array())
{
$data = array(
'field' => '*',
'join' => array(),
'like' => array(),
'where' =>
array(),
'order' =>
array(),
'limit' => array()
);
foreach ($config as $key => $val){
$data[$key] = $val;
}
$this->db->select($data['field']);
$this->db->from($tabel);
if(count($data['join']) > 0) {
foreach ($data['join'] as $key
=> $val){
$this->db->join($key,$val,'left');
}
}
if(count($data['where']) > 0)
$this->db->where($data['where']);
if(count($data['like']) > 0){
foreach ($data['like'] as $key
=> $val){
if(is_array($val))
$this->db->like($key,$val[0],$val[1]);
else
$this->db->like($key,$val);
}
}
if(count($data['order']) > 0) {
foreach ($data['order'] as $key
=> $val){
$this->db->order_by($key,$val);
}
}
if(count($data['limit']) == 1)
$this->db->limit($data['limit'][0]);
if(count($data['limit']) == 2)
$this->db->limit($data['limit'][0],$data['limit'][1]);
return $this->db->get();
}
}
Seperti
yang Anda lihat pada file default_model.php di atas terdapat dua buah fungsi
yaitu getDataDB, dan getDataDB2.
Kedua fungsi tersebut masih saya gunakan hingga sekarang dan fungsi getDataDB2 merupakan pengembangan
dari fungsi getDataDB.
Sekarang siapkan file Controllernya, di sini saya beri nama
Idhamcontroller, sehingga file PHP-nya menjadi idhamcontroller.php. Berikut
source codenya :
<?php if ( ! defined('BASEPATH')) exit('No
direct script access allowed');
class Idhamcontroller extends CI_Controller {
function
__construct()
{
parent::__construct();
$this->load->model('default_model');
}
public
function index()
{
$data['title'] = 'Menggabungkan dan
Menggunakan Active Record Codeigniter ke dalam satu method atau fungsi';
$data['user']
= $this->default_model->getDataDB('tabel1','*',array('id_tabel1 >
'=>1,'id_tabel1 < '=>5));
$config1['where'] = array('id_tabel1'=>2);
$data['user2'] =
$this->default_model->getDataDB2('tabel1',$config1);
$this->load->view('contoh',$data);
}
}
File view-nya saya beri nama contoh.php nah berikut source
code-nya :
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="utf-8">
<title><?=
$title; ?></title>
<style
type="text/css">
::selection{
background-color: #939191; color: white; }
::moz-selection{
background-color: #E13300; color: white; }
::webkit-selection{
background-color: #E13300; color: white; }
body
{background-color: #fff; margin:
40px;font: 13px/20px normal Helvetica, Arial, sans-serif;color: #4F5155;}
a
{ color: #003399; background-color: transparent;font-weight:
normal;}
h1
{color: #444;background-color: transparent;border-bottom: 1px solid
#D0D0D0;font-size: 19px;font-weight: normal;margin: 0 0 14px 0; padding: 14px 15px 10px 15px;}
code
{ font-family: Consolas, Monaco,
Courier New, Courier, monospace; font-size:
12px; background-color: #f9f9f9; border: 1px solid #D0D0D0; color: #002166; display: block; margin: 14px 0 14px 0; padding:
12px 10px 12px 10px;}
#body{ margin: 0 15px 0 15px;}
p.footer{ text-align: right; font-size: 11px; border-top: 1px solid #D0D0D0; line-height:
32px; padding: 0 10px 0 10px; margin: 20px 0 0 0;}
#container{ margin: 10px; border: 1px solid #D0D0D0; -webkit-box-shadow:
0 0 8px #D0D0D0;}
</style>
</head>
<body>
<div id="container">
<h1><?=
$title; ?>!</h1>
<div
id="body">
<p>
Hasil
1, dengan perintah Select dan where menggunakan fungsi getDataDB :<br/>
<?php
if($user->num_rows
> 0){
$hasil1
= '';
foreach($user->result()
as $row){
$hasil1
.= 'id_tabel1 : '.$row->id_tabel1.' | nama : '.$row->nama.'<br/>';
}
echo
rtrim($hasil1,'<br/>');
} else echo
'data kosong';
?>
</p>
<p>
Hasil
2, dengan perintah Select dan where menggunakan fungsi getDataDB2 :<br/>
<?php
if($user2->num_rows
> 0){
$hasil2
= '';
foreach($user2->result()
as $row){
$hasil2
.= 'id_tabel1 : '.$row->id_tabel1.' | nama : '.$row->nama.'<br/>';
}
echo
rtrim($hasil2,'<br/>');
}
else echo 'data kosong';
?>
</p>
</div>
<p
class="footer">Page rendered in
<strong>{elapsed_time}</strong> seconds</p>
</div>
</body>
</html>
Di bawah ini adalah database yang
akan kita gunakan :
CREATE DATABASE `aktivrecord` DEFAULT
CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `aktivrecord`;
CREATE TABLE IF NOT EXISTS `tabel1` (
`id_tabel1` int(11) NOT NULL AUTO_INCREMENT,
`nama`
varchar(20) NOT NULL,
PRIMARY KEY (`id_tabel1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `tabel1` (`id_tabel1`, `nama`)
VALUES
(1, 'Baidu'),
(2, 'Google'),
(3, 'Alexa'),
(4, 'Idham'),
(5, 'Pembaca sekalian');
CREATE TABLE IF NOT EXISTS `tabel2` (
`id_tabel2` int(11) NOT NULL AUTO_INCREMENT,
`id_tabel1` int(11) NOT NULL,
`tempat_lahir` varchar(20) NOT NULL,
PRIMARY KEY (`id_tabel2`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `tabel2` (`id_tabel2`, `id_tabel1`,
`tempat_lahir`) VALUES
(1, 1, 'China'),
(2, 2, 'AS'),
(3, 3, 'AS Mungkin'),
(4, 4, 'Sekadau'),
(5, 5, 'Dimana mana');
Sebelum menjalankan programnya silahkan setting file
autoload.php di folder “./application/config/autoload.php”, tujuannya adalah kita
ingin meload library database secara otomatis seperti gambar
di bawah ini:
Jangan lupa juga mensetting file database.php Anda dan sesuaikan
dengan pengaturan user di databaseAnda,
sebagai contoh saya sertakan pula gambarnya di bawah ini:
Penjelasan penggunaan di sini adalah cara menggunakan model Active Record Codeigniter yang telah
kita buat tadi (file default_model.php) yang terletak pada file
idhamcontroller.php yang juga sudah saya berikan source codenya di
atas.
Yang pertama saya mau menjelaskan cara penggunaan default_model dengan nama fungsi getDataDB dahulu.
Yang pertama saya mau menjelaskan cara penggunaan default_model dengan nama fungsi getDataDB dahulu.
$data['user'] =
$this->default_model->getDataDB('tabel1','*',array('id_tabel1 > '=>1,'id_tabel1 < '=>5));
Kode
di atas merupakan contoh perintah Select dan where menggunakan fungsi getDataDB
sehingga pernyataan SQL-nya menjadi “SELECT * FROM
tabel1 WHERE id_tabel1 > 1 AND id_tabel1 < 5". Tanda
bintang(*) menunjukan pengambilan semua field, jika hanya field tertentu
silahkan tulis nama fieldnya dipisah oleh tanda koma misalnya “id_tabel1,nama” dan seterusnya. Selain itu Anda
juga bisa menggunakan perintah join pada fungsi getDataDB ini misalnya sebagai
berikut :
$data['user'] =
$this->default_model->getDataDB('tabel1','tabel1.nama,
tabel2.tempat_lahir',array(),array('tabel2'=>'tabel2.id_tabel1 =
tabel1.id_tabel1'));
Perintah di atas akan menghasilkan SQL “SELECT tabel1.nama, tabel2.tempat_lahir FROM (tabel1) LEFT
JOIN tabel2 ON tabel2.id_tabel1 = tabel1.id_tabel1″ tanpa mengikuti
pernyataan where sehingga tempat untuk statement where-nya cukup kita buat
menjadi array().
Selanjutnya adalah pembahasan Active Record
Codeigniter di default_model dengan nama fungsi getDataDB2.
$config1['where'] = array('id_tabel1'=>2);
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Saya lebih suka menggunakan getDataDB2 pada fungsi
di default_model yang sudah kita buat tadi, karena memang fungsi ini merupakan
pengembangan dari fungsi getDataDB. Dan penggunaannya jauh lebih mudah tinggal
Anda buat config-nya saja. Pada perintah di atas akan menghasilkan SQL “SELECT * FROM tabel1 WHERE id_tabel1 = 2″. Nah
berikut saya buatkan beberapa contoh lain untuk Anda supaya lebih jelas cara
penggunaan Active Record yang sudah dijadikan satu dalam fungsi getDataDB2.
Penggunaan Where :
$config1['where'] = array('id_tabel1 >'=>1,'id_tabel1 <'=>5); # WHERE id_tabel1 > 1 AND id_tabel1 < 5
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Penggunaan Field :
$config1['where'] = array('id_tabel1'=>2); # WHERE id_tabel1 = 2
$config1['field'] = array('nama'); # field yang akan diambil `nama`. Pisahkan dengan koma jika ada yang lain misal `id_tabel1,nama`.
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Tanpa config, artinya mengambil semua data di
tabel1 :
$data['user2'] = $this->default_model->getDataDB2('tabel1');
Penggunaan Join :
$config1['where'] = array('id_tabel1'=>2); # WHERE id_tabel1 = 2
$config1['field'] = array('nama'); # field yang akan diambil `nama`. Pisahkan dengan koma jika ada yang lain misal `id_tabel1,nama`.
$config1['join'] = array('tabel2'=>'tabel2.id_tabel1 = tabel1.id_tabel1'); # Penggunaan join
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Penggunaan Like :
$config1['like'] = array('nama'=>'i');
# $config1['like'] = array('nama'=>array('i','before')); # Contoh lain bearti WHERE nama LIKE '%i'
# $config1['like'] = array('nama'=>array('i','after')); # Contoh lain bearti WHERE nama LIKE 'i%'
# $config1['like'] = array('nama'=>array('i','before')); # Contoh lain bearti WHERE nama LIKE '%i%'
$data['user2'] = $this->default_model->getDataDB2('tabel1',$config1);
Sumber: http://catatanbelajar.com/2012/03/menggabungkan-dan-menggunakan-active-record-codeigniter-ke-dalam-satu-method-atau-fungsi/
SEKIAN DAN TERIMA KASIH
No comments:
Post a Comment