Sobrecarga en PHP extendiendo la clase Laravel Collection
Cuando trabajamos con bases de datos en Laravel hacemos uso del ORM que trae consigo el framework por defecto, se trata de Eloquent, el cual nos ofrece un gran número de métodos muy útiles al momento de interactuar con cada modelo de datos (o tabla dentro de una base de datos). Por ejemplo
// Nueva instancia del modelo user $user = new User; // Devuelve el registro con id = 1 $user->find(1);
Para mas información sobre Eloquent visita nuestros tutoriales al respecto.
Esto es gracias a la clase Collection de Eloquent que a su vez extiende de la clase Illuminate\Support\Collection de Laravel. Esta clase nos ofrece también otra forma de trabajar con variables de tipo Array gracias al helper collect() de Laravel.
$array = [1,2,3,4,5]; $collection = collect($array); // Devuelve "1" -- el primer elemento del array $collection->first();
Visita el post sobre Uso de colecciones en Laravel.
Desafortunadamente cuando usamos el helper collect() no podemos obtener los valores de un array de la misma forma que lo hacemos con los objetos de Eloquent; Es decir, no podemos llamar $user->name, por el contrario tenemos que usar el método get() para obtener el valor.
$user = ['name' => 'Joe', 'age' => 25]; $user = collect($user); $user->get('name');
Vamos a solucionar ese problema extendiendo la funcionalidad de la clase Illuminate\Support\Collection en una nueva clase que llamaremos Collector. Primero crearemos un nuevo directorio llamado Collector dentro de la carpeta app/. Una vez hecho esto, vamos a crear un nuevo archivo para nuestra clase llamado Collector.php que extenderá a la clase Illuminate\Support\Collection.