DEV Community

Cover image for Top 10 Laravel Collection Methods You Have Never Used.
Karan Datwani
Karan Datwani

Posted on • Originally published at backpackforlaravel.com

Top 10 Laravel Collection Methods You Have Never Used.

In this article series, we go a little deeper into parts of Laravel we all use, to uncover functions and features that we can use in our next projects... if only we knew about them!

Here are a few lesser-known collection methods that can be quite handy in various real-world scenarios:

  1. macro(): This lets you add custom methods to Laravel collections that can be used on any collection instance:

use Illuminate\Support\Collection;

Collection::macro('customMethod', function () {
    // Your custom method logic
});

$collection = collect([...]);
// use on any collection object
$result = $collection->customMethod();
Enter fullscreen mode Exit fullscreen mode
  1. concat(): Suppose you have two collections of users from different sources and want to combine them into a single collection. You can use concat for this purpose:
$usersFromDatabase = User::where(...)->get();
$usersFromApi = collect([...]);

$combinedUsers = $usersFromDatabase->concat($usersFromApi);
Enter fullscreen mode Exit fullscreen mode
  1. pad(): You have a collection of tasks, but you want to ensure that it always contains a minimum number of elements. You can use pad to add dummy tasks if necessary:
$tasks = collect([...]);

$paddedTasks = $tasks->pad(10, 'Dummy Task');
Enter fullscreen mode Exit fullscreen mode
  1. shuffle() & random(): Suppose you have a quiz application and want to shuffle the order of the questions. You can use shuffle for this purpose. Additionally, if you're going to select a question from the collection randomly, you can use random:
$questions = collect([...]);

$shuffledQuestions = $questions->shuffle();
$randomQuestion = $questions->random();
Enter fullscreen mode Exit fullscreen mode
  1. crossJoin(): Suppose you've two collections and you want to generate all possible combinations from them.
$collection = collect([1, 2]); 
$matrix = $collection->crossJoin(['a', 'b']); 
$matrix->all();
/*[
    [1, 'a'],
    [1, 'b'],
    [2, 'a'],
    [2, 'b'],
]*/

$collection = collect([1, 2]); 
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']); 
$matrix->all();
/*[
    [1, 'a', 'I'],
    [1, 'a', 'II'],
    [1, 'b', 'I'],
    [1, 'b', 'II'],
    [2, 'a', 'I'],
    [2, 'a', 'II'],
    [2, 'b', 'I'],
    [2, 'b', 'II'],
] */

Enter fullscreen mode Exit fullscreen mode
  1. partition(): Imagine you have a collection of students, and you want to partition them into two groups based on their grades (pass or fail). partition makes this easy:

$students = collect([...]);

list($passingStudents, $failingStudents) = $students->partition(function ($student) {

    return $student->grade >= 60;

});

Enter fullscreen mode Exit fullscreen mode
  1. first() and firstWhere(): You have a collection of tasks, and you want to retrieve the first task or the first task that meets certain criteria. first and firstWhere come in handy:

$tasks = collect([...]);

$firstTask = $tasks->first();

$urgentTask = $tasks->firstWhere('priority', 'urgent');

Enter fullscreen mode Exit fullscreen mode
  1. keyBy(): You have a collection of users, and you want to index them by their unique IDs for quick access. keyBy is the solution:

$users = collect([...]);

$indexedUsers = $users->keyBy('id');

Enter fullscreen mode Exit fullscreen mode
  1. filter(): You have a collection of orders coming from API and you want to filter out the canceled orders. The filter method is perfect for this:

$orders = collect([...]);

$validOrders = $orders->filter(function ($order) {

    return $order->status !== 'canceled';

});

Enter fullscreen mode Exit fullscreen mode
  1. transform(): You have a collection of tasks, and you want to modify each task in some way. transform allows you to apply a callback to each item to replace it:

$tasks = collect([...]);

$tasks->transform(function ($task) {

    return $task->name . ' - ' . $task->priority;

});

Enter fullscreen mode Exit fullscreen mode

That's all for now, folks! These methods offer ease & flexibility that can be useful when working with Laravel applications.

All the above have been previously shared on our Twitter, one by one. Follow us on Twitter; You'll ❤️ it. You can also check the first article of the series, which is on Top 5 Scheduler Functions you might not know about. Keep exploring, keep coding, and keep pushing the boundaries of what you can achieve.

Top comments (0)