Pendahuluan Bayangin lagi ngerjain fitur sederhana, tapi pas mau nambahin tombol 'Favorite', tiba-tiba kepikiran gimana cara bikin relasi yang efisien tanpa bikin query database jadi lemot? Saya sering nemuin developer yang langsung buru-buru bikin tabel baru tapi lupa mempertimbangkan skalabilitasnya di masa depan. Fitur wishlist ini emang kelihatan sepele, tapi kalau database udah ribuan user dan jutaan produk, cara kita narik relasinya bakal kerasa banget bedanya. Tips & Best Practices Di banyak project, biasanya saya mulai dari bikin tabel pivot yang bersih; jangan lupa pake migration yang punya index biar performa query tetep kenceng pas user nge-load daftar favorit mereka. Saya juga selalu saranin pake custom pivot model kalau kalian butuh nyimpen metadata tambahan kayak 'kapan user nge-add barang ini'. Terakhir, manfaatin eager loading biar nggak kejadian N+1 query yang bikin server nangis pas user buka halaman profil mereka. Contoh Kode Biasanya saya definis...
Pendahuluan Bayangin lagi ngerjain fitur sederhana, tapi tiap kali narik data user yang 'aktif', kamu nulis where('status', 'active') berulang-ulang di berbagai controller. Awalnya kelihatan oke, sampai akhirnya logic status itu berubah, dan kamu harus 'berburu' di seluruh codebase buat ngupdate satu baris kode. Laravel sebenernya udah nyediain penyelamat yang namanya Query Scopes buat ngerapiin kekacauan kayak gini. Tips & Best Practices Di banyak project, biasanya saya mulai dari menamai scope dengan awalan 'scope'. Ini ngebantu banget biar pas dipanggil di controller, kodenya jadi kerasa kayak bahasa manusia biasa, misalnya User::active()->get() . Pernah kejadian saya salah naruh logic yang kompleks di controller, akhirnya saya pindahin ke Local Scope biar unit testing-nya jauh lebih mudah. Saya selalu nyaranin buat pakai Global Scope cuma buat hal-hal yang 'mutlak' harus ada di tiap query, kayak sistem soft delete atau tenant-...