From d41108540070b1ab601d5982cd0e4e9604e97c72 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Fri, 4 Sep 2026 09:45:18 +0700 Subject: [PATCH] feat: update BEST_PRACTICE.md; clarify Eloquent select behavior with joins and aggregate methods --- BEST_PRACTICE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BEST_PRACTICE.md b/BEST_PRACTICE.md index 5eacb6b..d8e063e 100644 --- a/BEST_PRACTICE.md +++ b/BEST_PRACTICE.md @@ -154,6 +154,8 @@ ## 3. Model & Eloquent | `->select('id', 'name')->get()` | `->get(['id', 'name'])` | | `->first()->name` | `->value('name')` | + Pola `->get([...])`/`->paginate($perPage, [...])` ini berlaku juga walau ada `with()`/`when()`/`join()`/dll di antara — Eloquent tidak peduli di posisi mana `select()` dipanggil relatif ke klausa lain, cuma peduli klausa itu ada sebelum eksekusi. **Kecuali** kalau query yang sama pakai `withCount()`/`withSum()`/`withAvg()`/`withMax()`/`withMin()`: method-method itu diam-diam menyuntik `select(table.*)` kalau belum ada `select()` eksplisit sebelumnya, dan Eloquent hanya menerapkan kolom dari `get($columns)`/`paginate($perPage, $columns)` kalau belum ada `select()` — begitu `withCount()` lebih dulu mengisi kolom, argumen kolom di method terminal **diabaikan diam-diam tanpa error** (balik jadi `select(*)`, bocor semua kolom). Jadi kalau ada `withCount()`/`withSum()`/dst di query, `select([...])` eksplisit **wajib** tetap dipertahankan sebelum pemanggilan `withCount()`/dst, jangan dipindah ke method terminal. + --- ## 4. Controller, Request, dan Service