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:

dotenv
DB_CONNECTION=sqlite

Satu 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:

bash
php artisan migrate

Output yang Dihasilkan:

text
   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 DONE

Perhatikan 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:

bash
php artisan db:show

Output yang Dihasilkan:

text
  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:

php
'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:

dotenv
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=example_app
DB_USERNAME=example_user
DB_PASSWORD=YOUR_DATABASE_PASSWORD

Untuk PostgreSQL, gunakan koneksi pgsql dengan port bawaan 5432:

dotenv
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=example_app
DB_USERNAME=example_user
DB_PASSWORD=YOUR_DATABASE_PASSWORD

Setelah 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.