Top 10 Laravel Collection Methods You May Have Never Used
Photo by Karen Vardazaryan on Unsplash
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:
- 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();
-
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);
-
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');
-
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 userandom
:
$questions = collect([...]);
$shuffledQuestions = $questions->shuffle();
$randomQuestion = $questions->random();
- 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'],
] */
-
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;
});
-
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
andfirstWhere
come in handy:
$tasks = collect([...]);
$firstTask = $tasks->first();
$urgentTask = $tasks->firstWhere('priority', 'urgent');
-
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');
-
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';
});
-
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;
});
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.
driesvints, ol-serdiuk, issacnguyentx2022 liked this article