NexaUI menyediakan sistem database yang fleksibel dan mudah dikonfigurasi untuk berbagai jenis database. Dokumentasi ini akan membahas cara mengkonfigurasi koneksi database, mengelola multiple connections, dan praktik terbaik untuk pengaturan database di aplikasi NexaUI.
Konfigurasi database di NexaUI disimpan dalam file config/database.php
.
File ini berisi pengaturan untuk berbagai driver database yang didukung, termasuk MySQL,
PostgreSQL, SQLite, dan SQL Server.
<?php
// config/database.php
return [
// Default database connection
'default' => env('DB_CONNECTION', 'mysql'),
// Database connections
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'nexaui'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'nexaui'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'nexaui'),
'username' => env('DB_USERNAME', 'sa'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
],
// Migration table
'migrations' => 'migrations',
// Redis settings
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
],
];
Sebagian besar pengaturan database menggunakan environment variables yang didefinisikan
dalam file .env
. Ini memungkinkan Anda untuk memiliki konfigurasi yang berbeda
untuk setiap lingkungan tanpa mengubah kode.
# .env file
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nexaui_app
DB_USERNAME=nexaui_user
DB_PASSWORD=secret_password
Untuk lingkungan yang berbeda, Anda dapat memiliki file .env
yang berbeda:
.env
- Pengaturan lokal (tidak disimpan di version control).env.example
- Template untuk file .env (disimpan di version control).env.testing
- Pengaturan untuk lingkungan testing.env.production
- Pengaturan untuk lingkungan production
NexaUI akan secara otomatis terhubung ke database menggunakan koneksi default yang
dikonfigurasi. Anda dapat mengakses database menggunakan class DB
:
use App\System\Database\DB;
// Query sederhana
$users = DB::query('SELECT * FROM users WHERE active = ?', [1]);
// Query builder
$users = DB::table('users')
->where('active', 1)
->get();
Anda dapat menggunakan koneksi database yang berbeda dengan method connection()
:
// Menggunakan koneksi MySQL
$users = DB::connection('mysql')->table('users')->get();
// Menggunakan koneksi SQLite
$logs = DB::connection('sqlite')->table('logs')->get();
NexaUI mendukung database transactions:
DB::beginTransaction();
try {
// Operasi database
DB::table('users')->insert([
'name' => 'John Doe',
'email' => 'john@example.com',
]);
DB::table('profiles')->insert([
'user_id' => DB::lastInsertId(),
'bio' => 'Lorem ipsum',
]);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
throw $e;
}
Untuk aplikasi dengan beban tinggi, Anda dapat mengkonfigurasi koneksi terpisah untuk operasi read dan write:
'mysql' => [
'read' => [
'host' => [
'read-host-1.example.com',
'read-host-2.example.com',
],
],
'write' => [
'host' => 'write-host.example.com',
],
'driver' => 'mysql',
'database' => env('DB_DATABASE', 'nexaui'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
// Other options...
],
NexaUI akan secara otomatis menggunakan koneksi yang tepat berdasarkan operasi yang dilakukan.
Untuk memastikan konsistensi data dalam satu request, Anda dapat mengaktifkan sticky connections:
'mysql' => [
'read' => [
'host' => [
'read-host-1.example.com',
'read-host-2.example.com',
],
'sticky' => true,
],
'write' => [
'host' => 'write-host.example.com',
],
// Other options...
],
Untuk meningkatkan performa, Anda dapat mengkonfigurasi connection pooling:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
// Other options...
'pool' => [
'min' => 5,
'max' => 20,
'timeout' => 30,
],
],
NexaUI menyediakan sistem migrasi untuk mengelola struktur database. Migrasi disimpan
dalam direktori database/migrations
.
Anda dapat mengkonfigurasi tabel yang digunakan untuk melacak migrasi:
'migrations' => 'migrations',
Untuk menjalankan migrasi, gunakan command:
php nexa migrate
Untuk menjalankan migrasi pada koneksi tertentu:
php nexa migrate --database=sqlite
Untuk debugging, Anda dapat mengaktifkan query logging:
'mysql' => [
// Other options...
'logging' => true,
'log_level' => 'debug',
],
Query yang dijalankan akan dicatat di log aplikasi. Anda juga dapat mengakses query log secara programatis:
$queries = DB::getQueryLog();
Untuk koneksi yang aman, Anda dapat mengkonfigurasi SSL/TLS:
'mysql' => [
// Other options...
'ssl' => [
'ca' => env('DB_SSL_CA', '/path/to/ca.pem'),
'cert' => env('DB_SSL_CERT', '/path/to/cert.pem'),
'key' => env('DB_SSL_KEY', '/path/to/key.pem'),
'verify_server_cert' => true,
],
],
Password database harus selalu disimpan di environment variables, bukan di file konfigurasi yang disimpan di version control.
Seperti disebutkan sebelumnya, connection pooling dapat meningkatkan performa dengan menggunakan kembali koneksi database.
NexaUI mendukung query caching untuk meningkatkan performa:
// Cache query selama 60 detik
$users = DB::table('users')->cache(60)->get();
// Cache query dengan key kustom
$users = DB::table('users')->cache(60, 'all-active-users')->where('active', 1)->get();
// Hapus cache
DB::flushQueryCache('all-active-users');
Secara default, NexaUI menggunakan lazy connections, yang berarti koneksi database hanya dibuat ketika benar-benar diperlukan. Anda dapat mengubah perilaku ini:
'mysql' => [
// Other options...
'lazy' => false,
],
NexaUI mendukung database seeding untuk mengisi database dengan data awal. Seeders disimpan
dalam direktori database/seeders
.
Untuk menjalankan seeder, gunakan command:
php nexa db:seed
Untuk menjalankan seeder tertentu:
php nexa db:seed --class=UserSeeder
Jika koneksi database gagal, periksa:
Jika query database lambat:
Pengaturan database yang tepat sangat penting untuk performa dan keamanan aplikasi NexaUI. Dengan mengikuti praktik terbaik dan memanfaatkan fitur yang disediakan oleh NexaUI, Anda dapat membangun aplikasi dengan akses database yang efisien, aman, dan mudah dipelihara.