Kecik Database
PayPal: , (*1)
Rekening Mandiri: 113-000-6944-858, Atas Nama: Dony Wahyu Isprananda, (*2)
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., (*3)
Cara Installasi
file composer.json, (*4)
{
"require": {
"kecik/kecik": "1.0.*@dev",
"kecik/database": "1.0.*@dev"
}
}
Jalankan perintah, (*5)
composer install
Settingan Untuk MySQL
Nilai settingan darive untuk database ini adalah mysqli
jadi pustaka/library ini tidak menggunakan dari mysql, tapi menggunakan driver mysqli., (*6)
Contoh:, (*7)
$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');
Settingan Untuk PostgreSQL
Nilai settingan driver untuk database ini adalah pgsql
. Untuk PostgreSQL ada cara settingan yaitu:, (*8)
Tanpa DSN
Contoh:, (*9)
$app->config->set('database.driver', 'pgsql');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'postgres');
$app->config->set('database.password', '1234567890');
Dengan DSN
Contoh:, (*10)
$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'");
Settingan Untuk Oracle
Nilai settingan driver untuk database ini adalah oci8
, settingan menggunakan dsn., (*11)
Contoh:, (*12)
$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');
Settingan Untuk MongoDB
Nilai settingan driver untuk database ini adalah mongo
., (*13)
Contoh:, (*14)
$app->config->set('database.driver', 'mongo');
$app->config->set('database.dsn', 'mongodb://localhost');
$app->config->set('database.dbname', 'kecik');
Settingan Menggunakan PDO
Pustaka/library ini juga mendukung penggunaan driver PDO. Semua settingan menggunakan driver PDO semuanya menggunakan dsn.
Contoh PDO MySQL:, (*15)
$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:, (*16)
$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:, (*17)
$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');
INSERT
Format dari fungsi insert., (*18)
$app->db->$table->insert($data);
Struktur datanya adalah:, (*19)
$data = [
'field_nama' => 'Dony Wahyu Isp',
'field_email' => 'dna.extrim@gmail.com'
];
UPDATE
Format dari fungsi update., (*20)
$app->db->$table->update($key, $data);
Struktur key dan datanya adalah:, (*21)
//** $key
$key = ['id' => 2];
//** $data
$data = [
'field_nama' => 'dnaextrim',
'field_email' => 'dna.extrim@gmail.com'
];
DELETE
Format fungsi delete., (*22)
$app->db->$table->delete($key);
Struktur key nya adalah:, (*23)
$key = ['id' => 3];
SELECT
Format untuk fungsi find/select, (*24)
$rows = $app->db->$table->find($filter, $limit, $order_by);
SELECT Field, (*25)
$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, (*26)
LIMIT, (*27)
$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, (*28)
$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, (*29)
$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, (*30)
$rows = $app->db->$table->find([
'where' => [
'and' => [
'and' => [
["nama", "=", "Dony Wahyu Isp"],
["email", "=", "dna.extrim@gmail.com"]
],
'or' => [
["nama", "=", "Dony Wahyu Isp"],
["email", "=", "dna.extrim@gmail.com"]
]
]
]
]);
BETWEEN, (*31)
$rows = $app->db->$table->find([
'where' => [
["nilai", "between", [50, 100]],
["nilai", "not between", [50, 100]], //** Dengan NOT
]
]);
IN, (*32)
$rows = $app->db->$table->find([
'where' => [
["nilai", "in", [50, 60, 70, 80]],
["nilai", "not in", [50, 60, 70, 80]], //** Dengan NOT
]
]);
GROUP BY, (*33)
$rows = $app->db->$table->find([
'group by'=> [
['username']
]
]);
JOIN (Natural/Left/Right), (*34)
$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, (*35)
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., (*36)
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., (*37)
**Mendapatkan field yang bersumber dari query find **, (*38)
$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, (*39)
$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, (*40)
$rows = $app->db->$table->find();
$count = $app->db->$table->num_rows();
Contoh penggunaan Pada Kecik Framework Versi 1.1.*
[
'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'=>'dna.extrim@gmail.com'
];
$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.'
';
/*
Output email for dna.extrim@gmail.com
is dna*******@gmail.com
*/
echo 'Email: '.$row->email.'
';
}
});
$app->run();
?>
Contoh Tanpa Menggunakan Autoload Library
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'=>'dna.extrim@gmail.com'
];
$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.'
';
/*
Output email for dna.extrim@gmail.com
is dna*******@gmail.com
*/
echo 'Email: '.$row->email.'
';
}
});
$app->run();
?>