En esta lección aprenderemos a interactuar desde la terminal con nuestra aplicación utilizando la consola dinámica Tinker. También veremos nuevos métodos de Eloquent para interactuar con nuestros modelos y aprenderemos cómo crear nuestros propios métodos dentro de los modelos.
Repositorio
Ver el código de esta lección en GitHub
Notas
Acceder a Tinker
Podemos acceder al entorno con el comando de Artisan tinker
:
php artisan tinker
Desde el entorno interactivo podemos ejecutar expresiones de PHP y también vamos a tener disponible las clases de nuestro proyecto y del framework.
Retornar todos los registros con el método all()
Utilizando el método all()
retornamos todos los registros asociados a un modelo:
$professions = Profession::all();
Los métodos all()
y get()
en Eloquent retornan colecciones (objetos de la clase Illuminate\Database\Eloquent\Collection
) las cuales «envuelven» el array de resultados y nos proveen de funciones y métodos adicionales, por ejemplo:
Podemos obtener el primer resultado utilizando el método first()
y el último utilizando el método last()
. También podemos obtener un resultado aleatorio utilizando el método random()
:
$profession->first(); // Obtenemos el primer resultado $profession->last(); // Obtenemos el último resultado $profession->random(1); // Obtenemos un resultado aleatorio
Estos métodos de la clase Collection no generan nuevas consultas SQL sino que operan sobre los resultados ya encontrados.
Seleccionar un campo con el método pluck()
Utilizando el método pluck()
podemos retornar una nueva colección que contenga un listado de un solo campo en vez de un listado de objetos. Por ejemplo, podemos obtener solo el campo title
de la siguiente forma:
$professions->pluck('title');
Devuelve:
=> Illuminate\Support\Collection {#736 all: [ "Desarrollador back-end", "Desarrollador front-end", "Diseñador web", ], }
Crear una colección de forma manual
Con el helper collect
podemos crear una colección de forma manual:
collect(['Duilio', 'Styde', 'Laravel']);
Sin embargo éste será un objeto de la clase Illuminate\Support\Collection
que representa la colección «base» en vez de Illuminate\Database\Eloquent\Collection
.
Las colecciones de Eloquent extienden de la colección base pero proveen algunos métodos extra asociados al ORM.
Declarar métodos en el modelo
Podemos declarar métodos dentro de un modelo y utilizarlos cuando interactuemos con los objetos de estos modelos:
Declarando métodos no estáticos:
Asociamos un método para ser utilizado sobre un objeto (que representa un registro de la base de datos):
public function isAdmin() { return $this->email === '[email protected]'; }
En este caso isAdmin()
devuelve true si el email del usuario es igual al valor con el que está siendo comparado:
$user = User::find(1); $user->isAdmin(); // Devuelve true o false
Declarando métodos estáticos:
Asociamos un método a la clase del modelo como tal, la cual representa el acceso a una tabla de la base de datos. Estos métodos son usados típicamente para consultas:
public static function findByEmail($email) { return static::where('email', $email)->first(); }
Luego podrás usar User::findbyEmail('[email protected]')
para buscar a un usuario por el campo email y obtener un objeto User
como resultado (o null
si no se encuentra ningún registro).
Si te enreda un poco este tema de clases, objetos y métodos estáticos o no estáticos, te recomendamos altamente que veas nuestro Curso de Programación Orientada a Objetos con PHP desde cero.
Material relacionado
- Propiedades y métodos estáticos
- Iteración de objetos en PHP
- Objetos Inmutables en PHP
- Curso de programación orientada a objetos con PHP
- Lista con métodos disponibles para las colecciones de Laravel (documentación oficial)
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Introducción a Eloquent, el ORM del framework Laravel Lección siguiente Manejo de atributos en Eloquent ORM (solución a MassAssignmentException)