Laravel Eloquent uses Collections to return the results. Collections contain useful methods that make them very powerful and helpful to use. You can filter them, modify them, and much more with them very conveniently. This then results in your array being converted to a JavaScript object instead of an array. If you are not familiar with Laravel Collections, then check out my Laravel Collections guide.
Laravel filter
Laravel filter() is a built-in collections method that calls PHP array_filter() method on the underlying array, which preserves the array keys. The filter() method filters the collection using the given callback, keeping only those items that pass a given truth test.
You can find the collection filter method inside Illuminate\Support\Collection class. See the method below.
public function filter(callable $callback = null) { if ($callback) { return new static(Arr::where($this->items, $callback)); } return new static(array_filter($this->items)); }
The filter function takes a callback as an argument and runs a filter over each item. If the test fails for a particular item, then it will remove it from the collection.
Now, let’s see the example in action. For that, you need to install Laravel on your machine. I have already done it.
From now on, we will test each Laravel Collections Methods inside the routes >> web.php file.
Write the following code inside the web.php file.
<?php // web.php Route::get('/', function () { $collection = collect([19, 21, 29, 46]); $filtered = $collection->filter(function ($value, $key) { return $value > 21; }); dd($filtered->all()); });
So, we have checked each collection item against 21, and if any item > 21 in the collection, it will be included in a new array.
Now, start the Laravel server by typing the following command in your project root.
php artisan serve
Go to http://localhost:8000, and you will see the following output.
That means it has created an array with all the items > 21. Rest items will be removed from the collection.
If no callback is supplied, all entries of the collection that are equivalent to false will be removed.
<?php // web.php Route::get('/', function () { $collection = collect([0, 1, 2, 3, 4, 5]); $filtered = $collection->filter(); dd($filtered->all()); });
In the above code, 0 entry will be removed because it has been taken as a boolean 0, which is false. Thus, the output is the following.