Rekening Mandiri: 113-000-6944-858, Atas Nama: Dony Wahyu Isprananda
Merupakan pustaka/library yang dibuat khusus Framework Kecik, pustaka/library ini dibuat untuk mempermudah anda dalam menggunakan database kedalam project yang anda buat. Pustaka/Library ini, saat ini support untuk database mysql, oracle, postgresql, mongodb dan PDO.
file composer.json
{
"require": {
"kecik/kecik": "1.0.*@dev",
"kecik/database": "1.0.*@dev"
}
}
Jalankan perintah
composer install
Nilai settingan darive untuk database ini adalah mysqli
jadi pustaka/library ini tidak menggunakan dari mysql, tapi menggunakan driver mysqli.
Contoh:
$app->config->set('database.driver', 'mysqli');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');
$app->config->set('database.dbname', 'kecik');
Nilai settingan driver untuk database ini adalah pgsql
. Untuk PostgreSQL ada cara settingan yaitu:
Contoh:
$app->config->set('database.driver', 'pgsql');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'postgres');
$app->config->set('database.password', '1234567890');
Contoh:
$app->config->set('database.driver', 'pgsql');
$app->config->set('database.dsn', "host=localhost port=5432 dbname=kecik user=postgres password=1234567890 options='--client_encoding=UTF8'");
Nilai settingan driver untuk database ini adalah oci8
, settingan menggunakan dsn.
Contoh:
$app->config->set('database.driver', 'oci8');
$app->config->set('database.dsn', 'localhost/xe');
$app->config->set('database.username', 'kecik');
$app->config->set('database.password', '1234567890');
Nilai settingan driver untuk database ini adalah mongo
.
Contoh:
$app->config->set('database.driver', 'mongo');
$app->config->set('database.dsn', 'mongodb://localhost');
$app->config->set('database.dbname', 'kecik');
Pustaka/library ini juga mendukung penggunaan driver PDO. Semua settingan menggunakan driver PDO semuanya menggunakan dsn. Contoh PDO MySQL:
$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'mysql:host=localhost;dbname=kecik;');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');
Contoh PDO PostgreSQL:
$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'pgsql:host=localhost;dbname=kecik;');
$app->config->set('database.username', 'postgres');
$app->config->set('database.password', '1234567890');
Contoh PDO Oracle:
$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'oci:host=localhost;dbname=xe;');
$app->config->set('database.username', 'kecik');
$app->config->set('database.password', '1234567890');
Format dari fungsi insert.
$app->db->$table->insert($data);
Struktur datanya adalah:
$data = [
'field_nama' => 'Dony Wahyu Isp',
'field_email' => '[email protected]'
];
Format dari fungsi update.
$app->db->$table->update($key, $data);
Struktur key dan datanya adalah:
//** $key
$key = ['id' => 2];
//** $data
$data = [
'field_nama' => 'dnaextrim',
'field_email' => '[email protected]'
];
Format fungsi delete.
$app->db->$table->delete($key);
Struktur key nya adalah:
$key = ['id' => 3];
Format untuk fungsi find/select
$rows = $app->db->$table->find($filter, $limit, $order_by);
SELECT Field
$rows = $app->db->$table->find([
'select' => [
['nama, email'], //** Cara Pertama
['nama', 'email'], //** Cara Kedua
['max'=>'nilai'], //** Cara Ketiga
['max'=>'nilai', 'as'=>'nilai_maksimum'] //** Cara Keempat
]
]);
Catatan: Cara keempat hanya berlaku untuk database dengan SQL bukan untuk database NoSQL
LIMIT
$rows = $app->db->$table->find([],[10]); //** Cara Pertama limit 10 baris
$app->db->$table->find([], [5, 10]); //** Cara Kedua limit dari posisi index ke 5 sebanyak 10 baris
ORDER BY
$rows = $app->db->$table->find([],[],[
'asc' => ['nama', 'email'], //** Pengurutan menaik/Ascending untuk field nama dan email
'desc' => ['nama', 'email'] //** Pengurutan menurun/Descending untuk field nama dan email
]);
WHERE Where tanpa pengelompokan
$rows = $app->db->$table->find([
'where'=> [
["nama = 'Dony Wahyu Isp'"], //** Cara Pertama
["nama", "='Dony Wahyu Isp'"], //** Cara Kedua
["nama", "=", "Dony Wahyu Isp"], //** Cara Ketiga
["nama = '?' AND email = '?'" => [$nama, $email]], //** Cara Keempat
["nama", "='?' AND email = '?'" => [$nama, $email]], //** Cara Kelima
]
]);
Where dengan pengelompokan
$rows = $app->db->$table->find([
'where' => [
'and' => [
'and' => [
["nama", "=", "Dony Wahyu Isp"],
["email", "=", "[email protected]"]
],
'or' => [
["nama", "=", "Dony Wahyu Isp"],
["email", "=", "[email protected]"]
]
]
]
]);
BETWEEN
$rows = $app->db->$table->find([
'where' => [
["nilai", "between", [50, 100]],
["nilai", "not between", [50, 100]], //** Dengan NOT
]
]);
IN
$rows = $app->db->$table->find([
'where' => [
["nilai", "in", [50, 60, 70, 80]],
["nilai", "not in", [50, 60, 70, 80]], //** Dengan NOT
]
]);
GROUP BY
$rows = $app->db->$table->find([
'group by'=> [
['username']
]
]);
JOIN (Natural/Left/Right)
$rows = $app->db->$table->find([
'join' => [
['natural', 'table_profil'], //** Natural JOIN
['left', 'table_profil', 'field_nama'], //** Left/Righ Join Cara Pertama
['left', 'table_profil', ['field_nama_profile', 'field_nama_user']] //** Left/Right Join Cara Kedua
]
]);
Catatan: Untuk sementara ini join belum support untuk penggunaan database NoSQL seperti MongoDB
CALLBACK
Untuk melakukan manipulasi hasil row baik diterapkan pada seluruh field ataupun pada field tertentu saja. Parameter yang digunakan untuk callback adalah $value
dan $row
, $value
merupakan nilai yang diberikan oleh field pada setiap row/baris, sedangkan $row
merupakan data pada setiap row/baris nya.
####Penerapan pada seluruh Field
$rows = $app->db->$table->find([
'callback'=> function($value, $row) {
return 'Rp. '.$value;
}
]);
####Penerapan pada Field tertentu
$rows = $app->db->$table->find([
'callback'=> [
'harga' => function($value, $row) {
return 'Rp. '.$value;
},
'password' => function($value, $row) {
return '*****';
},
'id' => function($value, $row) {
$row->action = "{\"id\":\"$value\"}";
return $value;
},
]
]);
###Fields Untuk Mendapatkan nama field berserta dengan nama, tipe, ukuran dan nama table.
**Mendapatkan field yang bersumber dari query find **
$rows = $app->db->$table->find();
$fields = $app->db->$table->fields();
foreach($fields as $field) {
echo 'Name: '.$field->name;
echo 'Type: '.$field->type;
echo 'Size: '.$field->size;
echo 'Table: '.$field->table;
}
Mendapatkan field dari table
$fields = $app->db->$table->fields();
foreach($fields as $field) {
echo 'Name: '.$field->name;
echo 'Type: '.$field->type;
echo 'Size: '.$field->size;
echo 'Table: '.$field->table;
}
###Num Rows Untuk mendapatkan jumlah row/baris dari hasil find
$rows = $app->db->$table->find();
$count = $app->db->$table->num_rows();
<?php
require "vendor/autoload.php";
$config = [
'libraries' => [
'database' => [
'enable' => TRUE,
'config' => [
'driver' => 'mysqli',
'hostname' => 'localhost',
'username' => 'root',
'password' => '1234567890',
'dbname' => 'kecik'
]
]
]
];
$app = new Kecik\Kecik($config);
$con = $app->db->connect();
$res = $app->db->exec("SELECT * FROM data", 'data');
print_r($app->db->fetch($res));
$id = ['id'=>'2'];
$data = [
'nama'=>'Dony Wahyu Isp',
'email'=>'[email protected]'
];
$db = $app->db;
$ret = $db->data->insert($data);
$ret = $db->data->update($id, $data);
$ret = $db->data->delete($id);
$app->get('/', function() use ($db){
$rows = $db->data->find([
'where' => [
['nama', '=', "Dony Wahyu Isp"]
],
'callback' => [
//manipulating value of email fields
'email' => function($val, $row) {
return substr($val, 0, 3).str_repeat('*', strpos($val, '@')-3).substr($val, strpos($val, '@'))
}
]
]);
foreach ($rows as $row) {
echo 'Nama: '.$row->nama.'<br />';
/*
Output email for [email protected]
is dna*******@gmail.com
*/
echo 'Email: '.$row->email.'<hr />';
}
});
$app->run();
?>
<?php
$app = new Kecik\Kecik();
$app->config->set('database.driver', 'mysqli');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');
$app->config->set('database.dbname', 'kecik');
$db = new Kecik\Database($app);
$con = $db->connect();
$res = $db->exec("SELECT * FROM data", 'data');
print_r($db->fetch($res));
$id = ['id'=>'2'];
$data = [
'nama'=>'Dony Wahyu Isp',
'email'=>'[email protected]'
];
$ret = $db->data->insert($data);
$ret = $db->data->update($id, $data);
$ret = $db->data->delete($id);
$app->get('/', function() use ($db){
$rows = $db->data->find([
'where' => [
['nama', '=', "Dony Wahyu Isp"]
],
'callback' => [
//manipulating value of email fields
'email' => function($val, $row) {
return substr($val, 0, 3).str_repeat('*', strpos($val, '@')-3).substr($val, strpos($val, '@'))
}
]
]);
foreach ($rows as $row) {
echo 'Nama: '.$row->nama.'<br />';
/*
Output email for [email protected]
is dna*******@gmail.com
*/
echo 'Email: '.$row->email.'<hr />';
}
});
$app->run();
?>