Laravel 14 Bakal Rilis! Ini Fitur Baru & Breaking Changes yang Wajib Lu Tahu

"Laravel 14 siap rilis! Cek deretan fitur kodingan terbaru & perubahan besar yang bisa bikin kodingan lama kamu error kalau gak disiapin."
Meski Laravel 13 baru aja rilis awal tahun ini, tim developer Laravel udah mulai nge-gas nyicil pengembangan Laravel 14 di branch master GitHub mereka.
Sesuai tradisi siklus rilis tahunan, Laravel 14 diperkirakan bakal meluncur resmi di Kuartal 1 (Q1) 2027. Rilisan ini bakal dapet dukungan bug fixes sampai Q3 2028 dan security updates sampai Q1 2029.
Ingat ya bro, karena informasi ini diambil langsung dari perkembangan branch master, detail di bawah masih bisa berubah sebelum tanggal rilis resminya diketok. Yuk, kita bedah semua fitur baru dan breaking changes-nya!
# Syarat Minimal PHP Wajib PHP 8.4+
Poin paling krusial pertama: Laravel 14 resmi menaikkan standar minimal PHP ke versi 8.4 (naik dari Laravel 13 yang butuh PHP 8.3).
Alasannya simpel, under the hood Laravel 14 bakal pakai Symfony 8, yang syarat mutlaknya memang minimal PHP 8.4. Selain itu, ada beberapa pembaruan dependency di branch master:
- Package
ably/ably-phpnaik ke versi Ably protocol 2.0. orchestra/testbench-coreupdate ke versi^12.0.- Sudah mendukung PHPUnit versi 11.5, 12.5, hingga 13.
# Fitur-Fitur Baru di Laravel 14
Di rilis kali ini, Laravel makin fokus manjain developer! Ada banyak penambahan fungsi baru yang bikin kodingan lu jadi jauh lebih ringkas, ekspresif, dan makin gampang dibaca. Yuk, intip apa aja yang baru:
1. Support Routing HTTP QUERY (Route::query())
Laravel 14 menambahkan dukungan routing resmi buat HTTP method QUERY (metode aman yang bisa bawa request body):
Route::query('/search', function () {
return request()->input('filter'); });

- HTTP method
QUERYini otomatis di-cover kalau lu pakaiRoute::any(). - Proteksi CSRF middleware bakal memperlakukan method ini sebagai read request (sama kayak
GET,HEAD, danOPTIONS).
2. Opsi Otorisasi Langsung dari Model User ($user->authorize())
Dulu kalau mau jalanin otorisasi lewat model user, syntax-nya lumayan panjang. Sekarang makin ringkas:

Fungsinya mirip kayak $user->can(), tapi bedanya $user->authorize() bakal langsung melempar AuthorizationException kalau pengecekannya gagal.
3. Context Tambahan di Helper report()
Helper report() dan method exception handler sekarang menerima array context opsional buat ngebantu proses debugging/logging:

Catatan: Kontrak ExceptionHandler diubah menjadi report(Throwable $e, array $context = []). Kalau lu punya custom handler yang me-override report(), pastikan parameter baru ini ditambahkan.
4. Direct Testing buat On-Demand Disks (Storage::fake())
Sekarang lu bisa pakai Storage::fake('ondemand') buat mengintersepsi panggilan Storage::build(). Efeknya, lu bisa bikin unit test buat on-demand disks dengan assertion yang sama persis kayak named disks biasa.
5. Pencarian Primary Key Makin Methodical (orWhereKey() & Subquery Support)
Caleb White ngerapiin penanganan whereKey() dan whereKeyNot(), plus nambahin dua method baru: orWhereKey() dan orWhereKeyNot().
Kerennya lagi, keempat method pencarian ID ini sekarang udah mendukung subquery langsung!
Breaking Changes PENTING (Bisa Bikin Bug Gaib!)
1. Urutan Parameter Queue::pause() Dibalik
Di Laravel 13, lu wajib nulis nama koneksi dulu baru nama queue-nya. Di Laravel 14 dibalik: nama queue dulu, baru nama koneksi (opsional).

Method resume() dan isPaused() juga mengikuti pola urutan baru ini.
2. lazy() & chunk() Gak Lagi Merusak State Query Builder
Di Laravel 13, method lazy() dan chunk() mengubah (mutate) instance Query Builder saat proses paginasi jalan. Efek sampingnya, kalau builder yang sama dipanggil lagi setelahnya, hasilnya ngaco:

3. Perilaku findOr() dengan Array ID Disesuaikan
Dulu di Laravel 13, kalau lu ngirim array berisi ID ke findOr(), fungsi callback-nya gak bakal pernah dipanggil meskipun ID-nya gak ketemu kabeh.
Di Laravel 14, perilakunya disamakan dengan findOrFail():

4. Perbaikan Bug Array pada Cache::has() & Cache::forget()
Selama 4 tahun docblock-nya ngeklaim bisa nerima array, tapi eksekusi aslinya sering bermasalah. Sekarang bug-nya resmi di-fix:
Cache::has(['a', 'b']): Di Laravel 14 hanya ngereturntruejika SEMUA key di dalam array emang beneran ada di cache.Cache::forget(['a', 'b']): Di Laravel 14 beneran ngapus semua key yang dioper via array tanpa melempar warning "Array to string conversion".
5. MassPrunable Sekarang Meng-include Data Soft-Deleted
Trait Prunable dari dulu udah otomatis nambahin withTrashed() ke query pembersihan data. Tapi trait MassPrunable dulu lupa dimasukin. Di Laravel 14, keduanya dibuat konsisten.

Di Laravel 13: Perintah php artisan model:prune cuma ngehapus permanen data yang belum di-soft delete.Di Laravel 14: Perintah tersebut bakal nge-force delete SEMUA data yang cocok, termasuk data yang statusnya soft-deleted.Solusi: Kalau lu mau mempertahankan perilaku lama (biar data soft-delete gak ikut kehapus permanen), lu wajib nambahin withoutTrashed() di fungsi prunable() lu.
Laravel 14 keliatannya fokus banget ngerapiin developer experience (DX), konsistensi antarmuka kodingan, dan nge-fix perilaku gaib di versi terdahulu. Walau rilis resminya masih di Q1 2027, gak ada salahnya lu mulai siapin kodingan lu dari sekarang biar proses upgrade-nya nanti gak bikin pusing!