Navigation

Laravel

What's the Difference Between `request()->input()` and `request()->get()`?

Learn the key differences between Laravel's request()->input() and request()->get() methods for handling form data, query parameters, and JSON payloads.

Table Of Contents

The Short Answer

Think of input() as the universal data grabber - it checks everywhere (POST body, JSON, query params). Meanwhile, get() is the picky one - it only looks at query parameters in your URL.

Here's the breakdown:

// request()->input() - Gets data from anywhere in the request
$name = request()->input('name');           // From POST/PUT body or query string
$email = request()->input('user.email');   // Supports dot notation for nested data
$tags = request()->input('tags', []);      // With default value

// request()->get() - Gets data from query parameters only
$page = request()->get('page');            // Only from ?page=1 in URL
$search = request()->get('search', '');    // With default value

Key differences in practice:

// POST /api/users?debug=true
// Body: {"name": "John", "email": "john@example.com"}

public function store(Request $request)
{
    // input() checks both body AND query parameters
    $name = $request->input('name');      // "John" (from body)
    $debug = $request->input('debug');    // "true" (from query)
    
    // get() only checks query parameters
    $page = $request->get('page');        // null (not in query)
    $debug = $request->get('debug');      // "true" (from query)
    $name = $request->get('name');        // null (not in query)
    
    // Specific methods for clarity
    $allInput = $request->all();          // Everything (body + query)
    $queryOnly = $request->query();       // Query parameters only
    $bodyOnly = $request->post();         // POST body only (if form data)
}

When to Use Which?

Use input() when: You want flexibility - whether data comes from a form, JSON payload, or URL doesn't matter.

Use get() when: You specifically need URL parameters (pagination, filters, debug flags).

Best practices and recommendations:

// Use input() for API endpoints (handles JSON + query params)
public function apiMethod(Request $request)
{
    $userId = $request->input('user_id');     // Flexible - works with JSON or form
    $filters = $request->input('filters', []); // Good for complex data
}

// Use get() for pagination, filtering, debugging flags
public function index(Request $request)
{
    $page = $request->get('page', 1);         // Clearly from URL
    $perPage = $request->get('per_page', 15); // URL parameters
    $debug = $request->get('debug', false);   // Debug flags
}

// Combine both when needed
public function search(Request $request)
{
    $query = $request->input('q');            // Search term (flexible)
    $page = $request->get('page', 1);         // Pagination (URL only)
    $category = $request->input('category');   // Filter (flexible)
}

// Alternative specific methods
$json = $request->json('key');               // JSON data only
$header = $request->header('Authorization');  // Headers
$file = $request->file('upload');            // Files
$cookie = $request->cookie('session');       // Cookies

Related: Laravel Collections: Beyond Basic Array Operations | Laravel Events and Listeners: Building Decoupled Applications | Building Multi-tenant Applications with Laravel: A Comprehensive Guide | Laravel Request Lifecycle: Complete Guide with Examples 2025 | Level Up Your Laravel Validation: Advanced Tips & Tricks

Share this article

Add Comment

No comments yet. Be the first to comment!

More from Laravel