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

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

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

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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)