8. CodeIgniter & Database

CodeIgniter mendukung banyak jenis database misalnya MySql, PostGre SQL, Oracle, dan lainlain. Dukungan database dari CodeIgniter berupa penyediaan beberapa driver database yang sekaligus juga memiliki fungsi sekuriti, caching dan active record.

Connect ke Database

CodeIgniter memiliki sebuah file konfigurasi yang memungkinkan Anda menyimpan konfigurasi untuk melakukan koneksi ke database (username, password, nama database, dan lain-lain). File konfigurasi terletak berada di application/config/database.php. Pengaturan konfigurasi disimpan dalam bentuk array multi-dimensi dengan prototipe seperti berikut ini:


$db[‘default’][‘hostname’]=”localhost”;
$db[‘default’][‘username’]=”root”;
$db[‘default’][‘password’]=””;
$db[‘default’][‘database’]=”database_name”;
$db[‘default’][‘dbdriver’]=”mysql”;
$db[‘default’][‘dbprefix’]=””;
$db[‘default’][‘pconnect’]=TRUE;
$db[‘default’][‘db_debug’]=FALSE;
$db[‘default’][‘cache_on’]=FALSE;
$db[‘default’][‘cachedir’]=””;
$db[‘default’][‘char_set’]=”utf8″;
$db[‘default’][‘dbcollat’]=”utf8_general_ci”;


Kita dapat memiliki beberapa konfigurasi database. Alasan kita menggunakan array multi-dimensi adalah agar memungkinkan Anda secara opsional menyimpan beberapa set nilai-nilai koneksi. Jika, misalnya, Anda menjalankan aplikasi dibeberapa kondisi lingkungan/environtment
(development,  production,  testing, dll) di bawah satu instalasi, maka Anda dapat mengatur kelompok konfigurasi untuk masing-masing  environtment. Sebagai contoh, Anda sedang menjalankan aplikasi di environment test maka Anda tinggal menambahkan konfigurasi berikut ini dan mengubah default konfigurasinya (mengeset $active_group=”test”) menjadi test:


$db[‘test’][‘hostname’]=”localhost”;
$db[‘test’][‘username’]=”root”;
$db[‘test’][‘password’]=””;
$db[‘test’][‘database’]=”database_name”;
$db[‘test’][‘dbdriver’]=”mysql”;
$db[‘test’][‘dbprefix’]=””;
$db[‘test’][‘pconnect’]=TRUE;
$db[‘test’][‘db_debug’]=FALSE;
$db[‘test’][‘cache_on’]=FALSE;

$db[‘test’][‘cachedir’]=””;
$db[‘test’][‘char_set’]=”utf8″;
$db[‘test’][‘dbcollat’]=”utf8_general_ci”;
$active_group=”test”;


Untuk connect ke database ada beberapa cara yang disediakan oleh CodeIgniter diantaranya :

  • Menambahkan Database Library Sebagai Autoload Library

Untuk connect ke database Anda bisa menambahkan database sebagai autoload library di file application/config/autoload.php. Cara ini sangat sederhana, cukup menambahkan kata”database” ke dalam autoload library sehingga menjadi :


$autoload[‘libraries’] = array(“database”);


Ketika menambahkan autoload pastikan bahwa database sudah terkonfigurasi dengan benar
untuk menghindari kesalahan.

  • Mengaktifkan Manual Dari Library Database

Jika hanya ada beberapa halaman website yang memerlukan konektivitas database, maka untuk optimalisasi lakukan koneksi ke database secara manual, cukup dengan menambahkan baris kode di bawah ini pada tiap fungsi tempat yang membutuhkan koneksi kedatabase atau dalam konstruktor kelas Anda untuk membuat database yang tersedia secara global di kelas.


$this->load->database();


Jika fungsi di atas tidak berisi informasi apapun di parameter pertama akan menyambung ke group konfigurasi yang aktif. Untuk memilih kelompok tertentu dari file konfigurasi, Anda dapat melakukan seperti pada contoh berikut. Hal tersebut berguna pada saat menggunakan aplikasi yang memiliki dua database.


$this->load->database(‘group_name’);


Group_name adalah nama grup konfigurasi dari file konfigurasi Anda. Untuk menghubungkan secara manual ke database yang diinginkan, Anda dapat melewatkan sebuah array nilai:


$config[‘hostname’]=”localhost”;
$config[‘username’]=”myusername”;
$config[‘password’]=”mypassword”;
$config[‘database’]=”mydatabase”;
$config[‘dbdriver’]=”mysql”;
$config[‘dbprefix’]=””;
$config[‘pconnect’]=FALSE;
$config[‘db_debug’]=TRUE;
$config[‘cache_on’]=FALSE;
$config[‘cachedir’]=””;
$config[‘char_set’]=”utf8″;
$config[‘dbcollat’]=”utf8_general_ci”;

$this->load->database($config);


Atau Anda bisa mengirimkan nilai-nilai database Anda sebagai Data Source Name. DSN harus
memiliki prototipe seperti ini:


$dsn=’dbdriver://username:password@hostname/database’;
$this->load->database($dsn);

  • Mengaktifkan manual dari model

Selain kedua cara di atas Anda juga bisa mengaktifkan database pada saat loading model. Caranya adalah dengan mengeset TRUE pada parameter ketiga load model. Contoh :


$this->load->model(‘Model_name’,”,TRUE);


Selain itu Anda juga bisa menggunakan konfigurasi tertentu untuk sebuah model. Contoh:


$manual_config[‘hostname’]=”localhost”;
$manual_config[‘username’]=”myusername”;
$manual_config[‘password’]=”mypassword”;
$manual_config[‘database’]=”mydatabase”;
$manual_config[‘dbdriver’]=”mysql”;
$manual_config[‘dbprefix’]=””;
$manual_config[‘pconnect’]=FALSE;
$manual_config[‘db_debug’]=TRUE;
$this->load->model(‘Model_name’,”,$manual_config);


 

CodeIgniter Model

Model pada CodeIgniter adalah sebuah kelas php yang berfungsi untuk menangani data. Ingat data bukan hanya dari database tetapi juga bisa dari File Text, Web Service atau  layanan-layanan data lainnya. Contoh Model:


class Blogmodel extends Model {
var$title=”;
var$content=”;
var$date=”;
function Blogmodel()
{
parent::Model();
}

function get_data()
{
$query=$this->db->get(‘entries’,10);
Return $query->result();
}
}


 

Sebuah model sebenarnya tidak harus meng-extend class Model. Kelas model di-extend ketika hendak menggunakan fitur database pada CodeIgniter  saja. Semua Model harus diletakkan di dalam folder  application/models.  Agar dapat menggunakan model maka kita harus me-load model tersebut. Adapun perintah yang dapat digunakan untuk meload sebuah model adalah


$this->load->model(‘Model_name’);
$this->Model_name->get_data();


 

Ketika sudah berhasil me-load sebuah model maka model tersebut akan menjadi sebuah property. Melalui property itulah Anda akan menggunakan semua fungsi yang ada di dalam model (perhatikan baris ke 2 pada contoh diatas get_data adalah fungsi didalam kelas Model_name)

Melakukan Query pada Database

Untuk mendapatkan data pada database Anda harus melakukan query. Setelah query dilakukan barulah bisa mendapatkan data hasil query tersebut, baik dalam bentuk object maupun array.


$query=$this->db->query(‘QUERY SQL ANDA’);


Perlu ditekankan bahwa fungsi query di atas belum menghasilkan data apapun. Keluarannya hanya berupa  Object(true) atau  False. Ketika keluarannya adalah  False maka query yang dilakukan berarti gagal. Tetapi jika true atau mengembalikan sebuah object maka query yang dilakukan berarti berhasil. Dari object tersebut (variabel $query kalau mengacu contoh di atas) Anda dapat mengambil data yang diinginkan. Contoh:


$query=$this->db->query(‘SELECT name, title, email FROM my_table’);
foreach($query->result()as $row)
{
echo $row->title;
echo $row->name;
echo $row->email;
}

echo’Total Results: ‘.$query->num_rows();


Contoh di atas adalah salah satu contoh penggunaan  query (tapi ingat, pastikan Anda sudah memiliki konfigurasi database yang benar dan telah  me-load library database. Perhatikan $query->result().  Itu adalah contoh syntax untuk mendapatkan hasil query dalam bentuk object, Anda juga dapat menggunakan $query->result_array() untuk mendapatkan hasil query dalam bentuk array assosiatif.

Query Return Value

Seperti yang telah disebutkan di atas, setelah query dilakukan kita perlu memanggil fungsi tertentu untuk mendapatkan hasil dari query. Secara umum ada dua jenis tipe data yang dapat dihasilkan yaitu array dan object. Dari segi jumlah kita hanya dapat mengambil satu record (per record) atau keseluruhan record.

  • Mengembalikan Hasil Query Sebagai Kumpulan Array.

Sebelum mengambil hasil query, ada baiknya mengecek terlebih dahulu apakah query tersebut memiliki hasil atau tidak. Perhatikan fungsi $result->result_array(), itu adalah method yang digunakan untuk mengambil hasil query. Sedangkan fungsi  $result->num_rows()
digunakan untuk mengetahui berapa jumlah record yang didapat.


$result=$this->db->query(‘SELECT * FROM users’);
if($result->num_rows()>0)
{
foreach($result->result_array()as $row)
{
echo $row[‘username’];
echo $row[’email’];
}
}


 

  • Mengembalikan Hasil Query Sebagai Kumpulan Object.

Fungsi yang digunakan hampir sama dengan mengembalikan nilai query sebagai array. Cukup dengan memanggil method $result->result().


$result=$this->db->query(‘SELECT * FROM users’);
if($result->num_rows()>0)
{
foreach($result->result()as $row)
{
echo $row->username;
echo $row->email;
}
}


  • Mengembalikan Hasil Query Sebagai Row Array

Jadi kita hanya mengambil sebuah record dari sebuah query. Bukan seluruh hasil query.


$result=$this->db->query(‘SELECT * FROM users’);
if($query->num_rows()>0)
{
$row=$query->row();
echo $row[‘username’];
echo $row[’email’];
}


  • Mengembalikan Hasil Query Sebagai Row Object

jadi kita hanya mengambil sebuah record dari sebuah query sebagai object. Bukan seluruh hasil query.


$result=$this->db->query(‘SELECT * FROM users’);
if($query->num_rows()>0)
{
$row=$query->row();
echo $row->username;
echo $row->email;
}


Menggunakan Active Record

Active Record (AR) adalah sebuah pattern / pendekatan untuk membaca data dari sebuah table atau view dengan cara membungkusnya dalam sebuah kelas. Sehingga tidak dibutuhkan SQL jika kita menggunakan active record. Keuntungan yang didapat adalah kesederhanaan dalam pengkodean program dan fleksibilitasnya ketika terjadi pergantian skema atau pun jenis database (bebas dari sintaks-sintaks SQL yang bersifat khusus ke database tertentu).

CodeIgniter tidak sepenuhnya meniru pattern Active Record, tetapi ia melakukan sedikit modifikasi terhadap pattern tersebut. Dengan menggunakan Active Record CI maka proses pengambilan data, insert, update dan delete menjadi lebih sederhana.


$this->db->get(‘users’)


Query di atas akan menghasilkan query “SELECT * FROM users” dan setara dengan


$this->db->query(‘SELECT * FROM users’);


Ketika kita tidak menggunakan fungsi apapun maka fungsi get akan menghasilkan seluruh record yang berada di dalam tabel tersebut, tetapi jika diberi fungsi select(), where(), dan lain-lain maka hasilnya akan berbeda.

Selecting Data

Untuk mengambil data dari database dengan field-field tertentu kita dapat menggunakan perintah select(). Contoh:


$this->db->select(‘username,password,email’);
$this->db->get(‘users’);


Query di atas setara dengan


$this->db->query(‘SELECT username,password,email FROM users’);


Selain method select, terdapat juga method-method lainnya seperti from(), where(), where_in(), group_by,  order_by,  like,  distinct() dan lain-lain. Semua method tersebut jika dipanggil akan membentuk sebuah query dan query tersebut akan dijalankan ketika method get() dipanggil. Untuk kemudahan, active record sudah memiliki fitur chaining method, jadi kita dapat merangkai semua query tadi sehingga menjadi lebih ringkas.  Contoh query yang kompleks


$data_all=$this->db
->select(“sum(budget) as sum_budget, site_ad_mapping.*”)
->where(‘site_ad_mapping.site_id’,$site_id)
->where(‘ad_status’,’approved’)
->where(‘request_status’,’active’) ->where(‘ad_operational_status’,’active’)
->join(‘ads’,’ads.id_ad =site_ad_mapping.ad_id ‘)
->join(‘advertisers’,’id_advertiser=advertiser_id’)
->join(‘site_counter’,’site_counter.site_id =site_id ‘)
->join(‘sites’,’site_counter.site_id = sites.id_site ‘)
->join(‘publishers’,’sites.publisher_id = id_publisher’)
->from(‘site_ad_mapping’)
->order_by(‘ad_priority_level’,’desc’)
->order_by(‘point’,’desc’)
->group_by(‘ad_id’)->limit(0,10)
->get()->result();


Insert Data

Selain pengambilan data, Active record juga menyediakan fungsionalitas untuk insert data. Untuk menginsert sebuah data kita hanya memerlukan dua parameter yaitu nama table dan data yang akan dimasukkan. Data yang akan dimasukkan harus memiliki format berupa array assosiatif ataupun object. Adapun keuntungan menggunakan active record untuk menginsert data selain sederhana untuk digunakan, adalah method ini secara build-in disertai fungsi untuk penanganan escaping, jadi query kita sudah bisa dikatakan aman dari kesalahan, contoh:


$data=array(‘username’=>’Ibnoe’,’email’=>’xibnoe@gmail.com’);
$this->db->insert(‘users’,$data);


Selain dengan cara di atas, kita juga bisa memasukkan data yang diinginkan satu persatu. Contohnya:


$data=array(‘username’=>’Ibnoe’,’email’=>’xibnoe@gmail.com’);
$this->db->set($data);
$this->db->insert(‘users’);


Atau


$this->db->set(‘username’,’ibnoe’);
$this->db->set(’email’,’xibnoe@gmail.com’);
$this->db->insert(‘users’);


Kedua Contoh di atas menghasilkan query yang sama.

Update Data

Selain insert dan select data, CodeIgniter juga menyediakan fungsi untuk update. Adapun penggunaannya mirip seperti penggunaan insert, contoh:


$this->db->set(‘username’,’ibnoe’);
$this->db->set(‘password’,’123456′);
$this->db->update(‘users’);


Query di atas akan menghasilkan query “update users set username=ibnoe, password=123456”.

Cara yang lebih sederhana dengan menggunakan array assosiatif


$data=array(‘username’=>’ibnoe’,’password’=>’123456′);
$this->db->where(‘id’,5);
$this->db->update(‘users’,$data);


Delete Data

Untuk melakukan delete pada CodeIgniter, kita dapat menggunakan perintah berikut ini:


$this->db->where(‘id’,5);
$this->db->delete(‘table_name’);


Sumber : Buku Framework Codeigniter

Leave a comment

May 2024
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  
terbanyak dipilih
  • None