Table Of Contents
Problem
You need to pass multiple values or arrays as parameters in a GET request for filtering or searching functionality.
Solution
Use array notation in query parameters and Laravel will automatically parse them:
// Frontend: Send array in URL
// GET /api/users?status[]=active&status[]=pending&roles[]=admin&roles[]=user
// Controller: Receive and use arrays
public function index(Request $request)
{
$statuses = $request->input('status', []);
$roles = $request->input('roles', []);
$users = User::query()
->when($statuses, fn($q) => $q->whereIn('status', $statuses))
->when($roles, fn($q) => $q->whereIn('role', $roles))
->get();
return response()->json($users);
}
Using Laravel's HTTP Client to send arrays:
// Sending the request
$response = Http::get('https://api.example.com/users', [
'status' => ['active', 'pending'],
'roles' => ['admin', 'user'],
'filters' => [
'age_min' => 18,
'age_max' => 65
]
]);
// This generates: ?status[]=active&status[]=pending&roles[]=admin&roles[]=user
JavaScript/Frontend example:
// Using URLSearchParams
const params = new URLSearchParams();
['active', 'pending'].forEach(status => params.append('status[]', status));
['admin', 'user'].forEach(role => params.append('roles[]', role));
fetch(`/api/users?${params.toString()}`);
// Or with Axios
axios.get('/api/users', {
params: {
'status[]': ['active', 'pending'],
'roles[]': ['admin', 'user']
}
});
Why It Works
Laravel automatically converts query parameters with array notation (param[]
) into PHP arrays. The input()
method handles both scalar values and arrays seamlessly. This enables complex filtering without requiring POST requests for simple data retrieval.
Advanced array handling:
public function search(Request $request)
{
// Handle nested arrays
$filters = $request->input('filters', []);
// URL: ?filters[name]=john&filters[age]=25
// Validate arrays
$validated = $request->validate([
'tags' => 'array',
'tags.*' => 'string',
'categories' => 'array',
'categories.*' => 'exists:categories,id'
]);
// Use arrays in queries
return User::whereIn('tag', $validated['tags'] ?? [])
->whereIn('category_id', $validated['categories'] ?? [])
->get();
}
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 | PHP Array Filter: Complete Guide with 7 Powerful Tricks
Add Comment
No comments yet. Be the first to comment!