Framework Guide

Clean Laravel GPT Controllers & N+1 Queries

Refactors spaghetti controllers; eager-loads relations for 5× faster pages.

January 15, 2025 6 min read

The controller chaos

Your Laravel controllers are 500+ line monsters doing everything from validation to PDF generation. Page loads trigger 200+ database queries, taking 10 seconds to display a simple list. The code mixes business logic, database queries, and view rendering in chaotic methods that make every new feature a nightmare to implement.

How AI ignored Laravel patterns

AI tools don't understand Laravel's elegant architecture patterns. They stuffed all logic into controllers instead of using services, repositories, or form requests. When displaying related data, they used lazy loading in loops, creating N+1 query explosions that turn simple user lists into database assaults.

The refactoring solution

  1. Extract validation into Form Request classes
  2. Move business logic to dedicated Service classes
  3. Implement eager loading for all relationships
  4. Add query debugging to catch future N+1 issues

Clean Architecture

// Before: Fat controller nightmare
class UserController extends Controller {
    public function index() {
        $users = User::all(); // N+1 query bomb!
        foreach($users as $user) {
            $user->posts; // Lazy loading disaster
            $user->comments; // More queries...
        }
        return view('users.index', compact('users'));
    }
}

// After: Clean, fast architecture
class UserController extends Controller {
    public function index(UserService $userService) {
        $users = $userService->getAllWithRelations();
        return view('users.index', compact('users'));
    }
}

class UserService {
    public function getAllWithRelations() {
        return User::with(['posts', 'comments'])->get(); // Single query!
    }
}

The performance transformation

Page load times dropped from 10 seconds to 200ms. Database queries decreased from 200+ to under 10 per request. The codebase became maintainable with clear separation of concerns. New features now take hours instead of days to implement safely.

Ready to fix your codebase?

Let us analyze your application and resolve these issues before they impact your users.

Get Diagnostic Assessment →