Query Builder
Query Builder membantu Anda untuk membuat query database secara dinamis dengan lebih cepat. Sebagian besar penggunaan method diakses dengan cara Method Chaining.
Untuk menggunakan feature ini pastikan konfigurasi koneksi ke database sudah benar. Untuk detail panduan koneksi database, silahkan klik di halaman configuration.
Select
Untuk mendapatkan data dari semua kolom tabel:
$data = $this->db->select()->from('users')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users
Untuk mendapatkan beberapa kolom dari tabel:
$data = $this->db->select('id', 'name')->from('users')->getAll();
// atau bisa juga
$data = $this->db->select( array('id', 'name') )->from('users')->getAll();
Method ini menghasilkan output data SQL:
SELECT id, name FROM users
Fungsi SQL juga bisa diisikan pada argument select():
$data = $this->db->select('COUNT(*)')->from('users')->getVar();
Method ini menghasilkan output data SQL:
SELECT COUNT(*) FROM users
Distinct
Berikut adalah contoh penggunaan statetment distinct:
$data = $this->db->select('name')->distinct()->from('users')->limit(10)->getAll();
Method ini menghasilkan output data SQL:
SELECT DISTINCT name FROM users LIMIT 10
From
Method from() dari contoh-contoh yang ada merepresentasikan dari nama tabel. $data = $this->db->select()->from('users')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users
Nilai argument bisa berupa string ataupun array.
$data = $this->db->select()->from('users', 'posts')->where('users.id', '=', 'posts.post_author')->getAll();
// atau
$data = $this->db->select()->from( array('users', 'posts') )->where('users.id', '=', 'posts.post_author')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users, posts WHERE users.id = posts.post_author
Join
Untuk melakukan query dari beberapa tabel, method join() bisa digunakan. Penggunaan method ini diikuti penggunaan method on(). $data = $this->db->select('users.name', 'posts.post')->from('users')->join('posts')->on('users.id', '=', 'posts.post_author');
Method ini menghasilkan output data SQL:
SELECT users.name, posts.post FROM users JOIN posts ON (users.id = posts.post_author)
Anda juga bisa menambahkan tipe join seperti LEFT, RIGHT dan INNER pada argument ke dua di dalam method join(). $data = $this->db->select('users.name', 'posts.post')->from('users')->join('posts', 'RIGHT')->on('users.id', '=', 'posts.post_author');
Method ini menghasilkan output data SQL:
SELECT users.name, posts.post FROM users RIGHT JOIN posts ON (users.id = posts.post_author)
Where
Untuk membatasi hasil pencarian Anda bisa menggunakan method where(). object where( string $column, string $operator, string $value, mix $seperator = false);
Parameter
Variable | Tipe Data | Keterangan |
---|---|---|
$column | string | Nama kolom yang menjadi kriteria penyeleksian. |
$operator | string | Operator SQL: IN, BETWEEN, >, =<, != |
$value | string | array | Nilai yang akan dibandingkan dengan kolom. |
$seperator | mix | Operator pemisah antara kondisi sebelum dan kondisi sesudah. Contoh: OR, AND |
Berikut contoh penggunaan method ini:
$data = $this->db->select()->from('users')->where('id', '=', 1)->getOne();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id = 1
Jika penyeleksian data lebih dari satu kondisi:
$data = $this->db->select()->from('users')->where('id', '=', 1, 'OR')->where('email', '=', [email protected]
')->getOne();
Penggunaan operator IN:
$data = $this->db->select()->from('users')->where('id', 'IN', array(1,4,7))->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id IN 1,4,7
Penggunaan operator BETWEEN:
$data = $this->db->select()->from('users')->where('id', 'BETWEEN', array(1,7))->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id BETWEEN 1 AND 7
Group By
Penggunaan method groupBy():
$data = $this->db->select('id', 'name')->from('users')->groupBy('name', 'id')->limit(10)->getAll();
Method ini menghasilkan output data SQL:
SELECT id, name FROM users GROUP BY name, id LIMIT 10
Having
Berikut adalah contoh cara menggunakan method having():
$data = $this->db->select('id', 'post_title')->from('posts')->groupBy('post_author','id', 'post_title')->having('COUNT(id)', '>=', 2)->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM posts GROUP BY post_author HAVING COUNT(id) >= 2
Order By
Untuk mengurutkan hasil pencarian data, Anda bisa menggunakan method orderBy()
$data = $this->db->select()->from('users')->orderBy('id')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users ORDER BY id
Cara yang lain:
$data = $this->db->select()->from('users')->orderBy('id', 'DESC')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users ORDER BY id DESC
Penggunaan dengan method where():
$data = $this->db->select()->from('users')->where('id', '>', 1)->orderBy('id', 'DESC')->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id > 1 ORDER BY id DESC
Limit
Argument pertama digunakan untuk menentukan jumlah limit. Berikut adalah cara penggunaan method limit():
$data = $this->db->select()->from('users')->where('id', '>', 1)->orderBy('id', 'DESC')->limit(3)->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id > 1 ORDER BY id DESC LIMIT 3
Sedangkan argument ke dua digunakan untuk menentukan nilai offset:
$data = $this->db->select()->from('users')->where('id', '>', 1)->orderBy('id', 'DESC')->limit(6,2)->getAll();
Method ini menghasilkan output data SQL:
SELECT * FROM users WHERE id > 1 ORDER BY id DESC LIMIT 6 OFFSET 2
Command
Jika Anda ingin melihat output SQL dari method chain yang sudah dibuat, silahkan gunakan method _command().
$sql = $this->db->select()->from('users')->groupBy('name')->limit(10)->_command();
die($sql);
Insert Id
Untuk mendapatkan id dari proses insert terakhir, bisa menggunakan properties $this->db->insert_id.
$this->db->query("INSERT INTO table_name (field_1, field_2) VALUES ('budi', [email protected]
')");
echo $this->db->insert_id;
Get One
Untuk mendapatkan single record menggunakan method:
getOne( table_name, where_argument, fields );
Keterangan Method ini:
table_name adalah string nama tabel yang akan diquery.
where_argument adalah array dari argument "WHERE". Contoh: WHERE id = '1' AND status = '0' maka array-nya adalah array('id' => '1', 'status' => '0') Nilai default parameter ini adalah null atau tidak ada argument "WHERE"
fields adalah array dari filed yang akan didapatkan. Nilai default argument ini adalah all (*). Untuk query seperti:
SELECT id, name, status FROM ....
Nilai array-nya adalah:
array('id', 'name', 'status')
Maka untuk query seperti ini:
"SELECT id, name, status FROM table_name WHERE id = '1' AND status = '0'"
Penggunaan method getOne-nya adalah:
$data = $this->db->getOne('table_name', array('id' => 1, 'status' => '0'), array('id', 'name', 'status') );
echo $data->id;
echo $data->name;
echo $data->status;
Get All
Untuk query seperti:
"SELECT id, name, email FROM table_name WHERE status = '1'"
Maka penggunaan Method getAll-nya adalah:
$data = $this->db->getAll('table_name', array('id' => 1, 'email' => [email protected]
'), array('field_1', 'field_2'));
foreach ($data as $data) {
echo $data->field_1;
echo $data->field_2;
}
Insert
Untuk menambahkan data baru dengan cara:
$query = $this->db->insert('table_name', array('name' => 'jhon', 'email' => [email protected]
'));
Method ini adalah abstraksi dari SQL:
INSERT INTO table_name (name, email) VALUES ('jhon', [email protected]
')
Update
Untuk melakukan update record dengan cara:
$query = $this->db->update('table_name', array('name' => 'jhon gmail', 'email' => [email protected]
'), array('id' => 6));
Method ini adalah abstraksi dari SQL:
UPDATE table_name SET name = 'budi', email = [email protected]
' WHERE id = 6
Kriteria juga bisa di-passing ke dalam method $this->db->where().
$this->db->where('id', '>', 1, 'AND');
$this->db->where('id', '<', 10);
$this->db->update('table_name', array('status' => 'visited') );
Hasil abstraksi SQL:
UPDATE table_name SET status = 'visited' WHERE id > 1 AND id < 10
Delete
Untuk menghapus record dengan cara:
$query = $this->db->delete('table_name', array('id' => '6'));
Method ini adalah abstraksi dari SQL:
DELETE FROM table_name WHERE id = 6
Atau menggunakan method $this->db->where().
$this->db->where('id', '>', 1, 'AND');
$this->db->where('id', '<', 10);
$this->db->delete('table_name');
Hasil abstraksi SQL:
DELETE FROM table_name WHERE id > 1 AND id < 10