Классика, которую все знают, но продолжают допускать. Особенно в Eloquent.
🔹 Проблема
$orders = Order::all();
foreach ($orders as $order) {
echo $order->user->name; // SELECT * FROM users WHERE id = ? (на каждой итерации!)
}
🔹 Решение — eager loading
$orders = Order::with('user')->get();
// Теперь 2 запроса вместо N+1🔹 Как поймать в проде
Подключите
debugbar или telescope в dev-среде. Или логируйте запросы вручную:DB::listen(function ($query) {
Log::info($query->sql, $query->bindings);
});💡 Если видите один и тот же запрос десятки раз в логах — это он. Ищите все места, где обращаетесь к связям внутри цикла.
Библиотека пхпшника
#vardump