Laravel provee de colecciones, que no son más que objetos que nos permiten hacer operaciones sobre arreglos de datos. Al ser objetos, las colecciones proveen de una interfaz fluida y de muchas más funciones que los arrays nativos de PHP. Es por ello que las consultas de Eloquent y Fluent retornan objetos de tipo «Collection» en vez de arrays.
A partir de Laravel 5.4, podemos utilizar una técnica llamada mensajes o funciones de «orden superior» en las colecciones y de esto te hablaré a detalle en la siguiente lección.
Notas
Vamos a definir una clase para los cursos con un título y con la opción de que sea premium o no:
<?php
class Course
{
    public $title;
    public $premium;
    public function __construct($title, $premium = false)
    {
        $this->title = $title;
        $this->premium = $premium;
    }
    public function premium()
    {
        return $this->premium;
    }
}
Ahora creamos una colección de cursos con el método collect:
$courses = collect([
    new Course('OOP', true),
    new Course('Primeros pasos', false),
    new Course('Git', true),
    new Course('Laravel 5.4', false)
]);
Usando métodos del objeto Collection podemos obtener los cursos premium, para este caso usaremos el método filter:
$premiumCourses = $courses->filter(function ($course) {
    return $course->premium;
});
O los gratuitos usando el método reject:
<?php
$freeCourses = $courses->reject(function ($course) {
    return $course->premium;
});
Ahora a partir de Laravel 5.4 puedes hacerlo de esta nueva forma más rápida (usando una propiedad):
<?php $premiumCourses = $courses->filter->premium; $freeCourses = $courses->reject->premium;
O usando métodos:
<?php $premiumCourses = $courses->filter->premium(); $freeCourses = $courses->reject->premium();
Nota que la propiedad y el método premium no están en el objeto Collection sino en los objetos que son parte de la colección.
Vale la pena mencionar que a partir de Laravel 5.3 también está disponible un método llamado partition en la clase Collection que permite dividir una colección en 2:
<?php
list($premiumCourses, $freeCourses) = $courses->partition('premium');
Así que si luego de obtener todos los cursos quisiera dividirlos en 2 listas (premium y gratuitos) entonces usaría partition, en vez de otro método.
Pero esta nueva técnica es muy útil, por ejemplo si tienes una colección de facturas y quieres pagarlas todas llamando al método pay en cada una:
<?php $invoices->each->pay();
El código es muy fácil de escribir y de leer.
Material relacionado
- Uso de colecciones en Fluent (constructor de consultas SQL)
 - Uso avanzado del método where en Laravel 5.3
 - Objetos inmutables en nuestro Curso de programación orientada a objetos en PHP
 
Si quedaste con dudas en esta lección por favor hazlas en nuestro Slack y te estaré contestando personalmente:
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección siguiente Componentes y slots en Laravel 5.4