Error berikut sering muncul saat menjalankan aplikasi atau migrasi Laravel:
SQLSTATE[42S02]: Base table or view not found:
1146 Table 'database.posts' doesn't exist
Artinya Laravel mencoba mengakses tabel yang belum ada di database. Berikut penyebab umum dan solusinya.
1. Migrasi Belum Dijalankan
Penyebab paling umum: Anda sudah membuat migration tapi lupa menjalankannya. Jalankan:
php artisan migrate
Cek dulu status migrasi untuk memastikan mana yang belum jalan:
php artisan migrate:status
2. Salah Nama Tabel di Model
Secara default Eloquent menebak nama tabel dari nama model (jamak, snake_case). Model Post โ tabel posts. Jika nama tabel Anda berbeda, tentukan manual:
class Post extends Model
{
protected $table = 'artikel'; // nama tabel sebenarnya
}
3. Terhubung ke Database yang Salah
Bisa jadi tabel ada, tapi di database berbeda. Periksa .env:
DB_DATABASE=nama_database_yang_benar
Lalu bersihkan cache config:
php artisan config:clear
4. Error Saat migrate:fresh karena Urutan Foreign Key
Jika migrasi gagal di tengah karena urutan (tabel anak dibuat sebelum tabel induk), pastikan migration tabel induk memiliki timestamp lebih awal. Untuk reset bersih:
php artisan migrate:fresh
Perhatian: migrate:fresh menghapus semua data. Jangan jalankan di server produksi.
5. Menjalankan Query Sebelum Migrasi (Contoh: Seeder)
Kalau seeder atau kode berjalan sebelum tabel dibuat, error ini muncul. Pastikan urutan: migrasi dulu, baru seed:
php artisan migrate --seed
Khusus Saat Deploy ke Server
Setelah upload ke hosting, jangan lupa jalankan migrasi di server (atau impor struktur database via phpMyAdmin). Banyak yang lupa langkah ini sehingga aplikasi lokal jalan tapi versi live error.
php artisan migrate --force
Kesimpulan
Error SQLSTATE[42S02] berarti tabel yang diminta tidak ada โ biasanya karena migrasi belum dijalankan, salah nama tabel di model, atau terhubung ke database yang salah. Periksa migrate:status dan .env lebih dulu. Untuk memahami migration lebih dalam, lihat panduan kami tentang cara membuat migration dan seeder di Laravel.