Laravel Collection Sort By Multiple Fields | websolutioncode.com
Laravel Collection Sort By Multiple Fields | websolutioncode.com

Sorting Laravel Collections by Multiple Fields

Sorting collections in Laravel is a common task, and sometimes you may need to sort them based on multiple fields. With Laravel, you can conveniently achieve this by employing the sortBy and sortByDesc methods within collections.

Basics of Sorting

Let’s start with the basics of sorting in Laravel. The sortBy method sorts the collection’s items based on a given key, while sortByDesc sorts them in descending order.

$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

// Sort by 'name' in ascending order
$sortedByName = $collection->sortBy('name');

// Sort by 'age' in descending order
$sortedByAgeDesc = $collection->sortByDesc('age');

Sorting by Multiple Fields

To sort a collection by multiple fields, you can chain the sortBy or sortByDesc methods. The order of chaining determines the priority of sorting.

$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

// Sort by 'name' in ascending order and then by 'age' in ascending order
$sortedByNameAndAge = $collection->sortBy('name')->sortBy('age');

// Sort by 'age' in descending order and then by 'name' in ascending order
$sortedByAgeDescAndName = $collection->sortByDesc('age')->sortBy('name');

Custom Sorting with a Callback Function

If you need more complex sorting logic, you can use the sortBy method with a callback function. The callback should return the value to be used for comparison.

$collection = collect([
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25],
    ['name' => 'Doe', 'age' => 35],
]);

// Sort by 'age' in ascending order and then by 'name' in ascending order
$sortedByAgeAndName = $collection->sortBy(function ($item) {
    return [$item['age'], $item['name']];
});

Source Code Example

Let’s create a simple Laravel controller to demonstrate sorting a collection by multiple fields.

// app/Http/Controllers/CollectionController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Collection;

class CollectionController extends Controller
{
    public function sortCollection()
    {
        $data = [
            ['name' => 'John', 'age' => 30],
            ['name' => 'Jane', 'age' => 25],
            ['name' => 'Doe', 'age' => 35],
        ];

        $collection = collect($data);

        // Sort by 'age' in ascending order and then by 'name' in ascending order
        $sortedByAgeAndName = $collection->sortBy(function ($item) {
            return [$item['age'], $item['name']];
        });

        return view('sorted-collection', compact('sortedByAgeAndName'));
    }
}
<!-- resources/views/sorted-collection.blade.php -->

<!DOCTYPE html>
<html>
<head>
    <title>Sorted Collection</title>
</head>
<body>
    <h1>Sorted Collection</h1>

    <table border="1">
        <tr>
            <th>Name</th>
            <th>Age</th>
        </tr>

        @foreach($sortedByAgeAndName as $item)
            <tr>
                <td>{{ $item['name'] }}</td>
                <td>{{ $item['age'] }}</td>
            </tr>
        @endforeach
    </table>
</body>
</html>

This example demonstrates sorting a collection in a Laravel controller and displaying the results in a Blade view. The collection is sorted by age in ascending order and then by name in ascending order.

Remember to create a corresponding route in your web.php file to access the controller method and view.

// routes/web.php

use App\Http\Controllers\CollectionController;

Route::get('/sort-collection', [CollectionController::class, 'sortCollection']);

Conclusion

Sorting collections by multiple fields in Laravel offers immense flexibility and control over data organization. By mastering these techniques, developers can optimize data handling, enhance user experiences, and streamline application functionalities. Explore these advanced strategies to leverage the full potential of sorting capabilities within Laravel collections.

Check our tools website Word count
Check our tools website check More tutorial

Leave a Reply