Hampir semua aplikasi yang akan kita bangun sepanjang Course ini menyimpan data: pengguna, artikel, komentar, dan sebagainya. Laravel mendukung banyak mesin database — SQLite, MySQL, MariaDB, PostgreSQL, hingga SQL Server — dan seluruh konfigurasinya terpusat di dua tempat: berkas .env untuk nilai per lingkungan dan config/database.php untuk definisi koneksi. Pada chapter ini kita akan membaca kedua berkas tersebut, mencoba konfigurasi bawaan SQLite, lalu melihat cara beralih ke database server seperti MySQL dan PostgreSQL.
Konfigurasi Bawaan: SQLite #
Proyek Laravel yang baru dibuat memakai SQLite secara bawaan. Kita bisa melihatnya dari bagian .env yang menyangkut database:
DB_CONNECTION=sqliteSatu baris tersebut sudah cukup untuk bekerja. Berbeda dengan MySQL atau PostgreSQL yang berjalan sebagai server terpisah, SQLite menyimpan seluruh database dalam satu berkas — database/database.sqlite — yang otomatis dibuat saat instalasi. Berikut pengalaman nyata saat berkas tersebut belum ada dan kita menjalankan migrasi pertama:
php artisan migrateOutput yang Dihasilkan:
WARN The SQLite database configured for this application does not exist: database/database.sqlite.
INFO Preparing database.
Creating migration table ....................................... 2.82ms DONE
INFO Running migrations.
0001_01_01_000000_create_users_table ........................... 1.92ms DONE
0001_01_01_000001_create_cache_table ........................... 1.00ms DONE
0001_01_01_000002_create_jobs_table ............................ 1.73ms DONEPerhatikan bahwa meski memperingatkan berkas database belum ada, Laravel langsung menyiapkannya lalu menjalankan tiga migrasi bawaan: tabel users, cache, dan jobs. Karena dokumentasi database
menyebut SQLite sebagai pilihan tanpa konfigurasi inilah Course ini memakainya — kita bisa fokus belajar tanpa memasang server database dulu.
Memeriksa Koneksi dengan db:show #
Laravel menyediakan perintah artisan untuk memastikan koneksi database bekerja. Jalankan db:show dari direktori proyek:
php artisan db:showOutput yang Dihasilkan:
SQLite .............................................................. 3.45.2
Connection .......................................................... sqlite
Database .......................................... database/database.sqlite
Host .......................................................................
Port .......................................................................
Username .................................................................
URL .......................................................................
Open Connections ...........................................................
Tables .................................................................. 10
Schema / Table ........................................................ Size
main / cache ............................................................. —
main / cache_locks ....................................................... —
main / failed_jobs ....................................................... —
main / job_batches ....................................................... —
main / jobs .............................................................. —
main / migrations ......................................................... —
main / password_reset_tokens ............................................. —
main / personal_access_tokens ............................................ —
main / sessions .......................................................... —
main / users ............................................................. —Output di atas memperlihatkan versi SQLite, nama berkas database, dan daftar 10 tabel hasil migrasi bawaan. Kolom Host, Port, dan Username kosong karena SQLite memang tidak memakai jaringan maupun autentikasi server.
Berkas config/database.php #
Nilai dari .env dibaca oleh config/database.php, tempat semua koneksi didefinisikan. Skeleton Laravel menyediakan lima koneksi siap pakai: sqlite, mysql, mariadb, pgsql, dan sqlsrv. Sebagai contoh, definisi koneksi SQLite di berkas tersebut terlihat seperti ini:
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DB_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],Setiap baris yang memanggil env() membaca nilai dari .env — misalnya DB_DATABASE menentukan lokasi berkas SQLite. Karena pola ini, mengganti database biasanya tidak menyentuh config/database.php sama sekali; kita cukup mengubah variabel di .env.
Kunci penghubung antara keduanya adalah DB_CONNECTION: nilai sqlite tersebut menunjuk entri bernama sqlite di array connections pada config/database.php, dan entri itulah yang dipakai sebagai koneksi bawaan oleh query builder maupun Eloquent. Definisi koneksi yang tidak terpilih tetap dibiarkan diam tanpa mencoba terhubung, sehingga aplikasi yang memakai SQLite tidak akan tersentuh konfigurasi pgsql sama sekali.
Beralih ke MySQL atau PostgreSQL #
Saat proyek tumbuh dan butuh database server sungguhan, kita tinggal mengganti nilai DB_* di .env. Contoh untuk MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=example_app
DB_USERNAME=example_user
DB_PASSWORD=YOUR_DATABASE_PASSWORDUntuk PostgreSQL, gunakan koneksi pgsql dengan port bawaan 5432:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=example_app
DB_USERNAME=example_user
DB_PASSWORD=YOUR_DATABASE_PASSWORDSetelah mengubah .env, buat database kosong di server (misalnya lewat mysql CLI atau createdb untuk PostgreSQL), lalu jalankan php artisan migrate untuk membangun tabelnya. Jangan lupa pastikan ekstensi PHP yang sesuai — pdo_mysql atau pdo_pgsql — muncul di php -m.
Kini aplikasi kita punya tempat menyimpan data yang terverifikasi lewat db:show. Sebelum mulai membangun fitur, kita perlu memahami berkas .env secara menyeluruh — termasuk variabel APP_KEY dan APP_ENV yang baru saja kita lihat sekilas — pada chapter Konfigurasi Environment.