LaravelLaravel22 min read

Advanced Filtering: Building Search + Sort + Pagination Correctly

Build reliable search endpoints that support filters, sorting, and pagination without messy controller code.

Daniel Harper
November 4, 2025
1.7k37

Real applications need flexible filtering:
- search by keyword
- filter by status
- date ranges
- sort newest/oldest
- paginate

    ## Example endpoint
    
    ```php
    public function index(Request $request) {
      $q = Post::query()->with('user');
    
      if ($request->filled('status')) {
        $q->where('status', $request->status);
      }
    
      if ($request->filled('search')) {
        $search = $request->search;
        $q->where(function ($sub) use ($search) {
          $sub->where('title', 'like', "%$search%")
              ->orWhere('body', 'like', "%$search%");
        });
      }
    
      $sort = $request->get('sort', 'desc');
      $q->orderBy('created_at', $sort);
    
      return $q->paginate(10);
    }
    ```
    
    ## Graph: filter pipeline
    
    ```mermaid
    flowchart LR
      A[Request Params] --> B[Query Builder]
      B --> C[Filters Applied]
      C --> D[Sort Applied]
      D --> E[Pagination]
      E --> F[Response]
    ```
    
    In the next tutorial, we will discuss database design for many-to-many relationships.
#Laravel#API#Database#Advanced