Tinker en Laravel es una herramienta que nos permite interactuar con toda la aplicación a través de la consola de comandos, así poder probar nuestra aplicación desde el comienzo con consultas Eloquent ORM.
¡Empecemos!
¿Qué es Tinker en Laravel?
Tinker en Laravel es un poderoso REPL (Bucle Lectura-Evaluación-Impresión) que permite interactuar con toda la aplicación a través de la consola de comandos. Por esta razón, es muy útil a la hora de realizar pruebas de funcionamiento de nuestra aplicación.
Ahora utilizaremos los métodos de Eloquent ORM directamente desde Tinker. A través de ejemplos prácticos, exploraremos la manipulación de datos en nuestras tablas, abordando operaciones como la visualización, creación, actualización y eliminación de información.
Al momento de crear un nuevo proyecto de Laravel por defecto Tinker ya viene instalado. Para iniciar Tinker ejecutamos el siguiente comando desde la Terminal.
php artisan tinker
Al ejecutar este comando, se desplegará la consola de Tinker, donde ya podemos empezar a interactuar con nuestra aplicación.
Utilizar Tinker
Tinker te permite manipular la base de datos mediante sentencias de Eloquent ORM, para nuestro ejemplo utilizaremos las migraciones y modelos que creamos en las anteriores clases Migraciones en Laravel y Eloquent ORM en Laravel.
Crear registros con Eloquent
Ahora veremos como se puede introducir registros a nuestra base de datos utilizando Eloquent desde Tinker. Lo primero es hacer las referencias a nuestros modelos “Alumno”, “Profesor” y “Curso”.
use App\Models\Profesor;
use App\Models\Alumno;
use App\Models\Curso;
A continuación, procederemos a instanciar un nuevo objeto del modelo “Profesor”, permitiéndonos así acceder a sus atributos y manipular los datos correspondientes.
$profesor = new Profesor;
Una vez creado el objeto $profesor podemos acceder a sus propiedades para asignarles su valor correspondiente.
$profesor->nombre_apellido = 'Juan Daniel Suarez';
$profesor->profesion = 'Ingeniero de sistemas';
$profesor->grado_academico = 'Licenciatura';
Finalmente, utilizamos el objeto $profesor para invocar la función save() para guardar los datos en la tabla correspondiente de nuestra base de datos.
$profesor->save();
Para confirmar y revisar la información registrada, abrimos el administrador de la base de datos que estamos utilizando y revisamos la información registrada.
De esta manera, podemos generar múltiples registros para la tabla “Profesores”. A continuación, seguiremos los mismos pasos para insertar registros esta vez en la tabla “Alumnos”.
$alumnoUno = new Alumno;
$alumnoUno->nombre_apellido = 'Maria de los Angeles';
$alumnoUno->edad = 21;
$alumnoUno->save();
$alumnoDos = new Alumno;
$alumnoDos->nombre_apellido = 'Alex Aidan Miranda Obrador';
$alumnoDos->edad = 24;
$alumnoDos->telefono = '76678899';
$alumnoDos->save();
De esta manera, insertamos dos registros en la tabla “Alumnos”, considerando que los campos “teléfono” y “dirección” son opcionales, por lo que no es necesario definir estos campos en los objetos.
Por último, vamos a insertar registros en la tabla “Cursos”.
$curso = new Curso;
$curso->materia = 'Desarrollo Web con Laravel';
$curso->nivel = '6to nivel';
$curso->horas_academicas = 120;
$curso->profesor_id = 1;
$curso->save();
De esta manera, insertamos en la tabla “Cursos”, considerando que el campo “profesor_id” es la referencia a la tabla “profesor” por la relación que tiene ambas tablas (relación uno a muchos).
Para poder insertar en la tabla pivot “alumno_curso” la cual surge de la relación muchos a muchos entre las tablas “alumnos” y “cursos”, empleamos la palabra reservada “attach”. La sintaxis para llevar a cabo este proceso es la siguiente.
A continuación, veremos la manera de actualizar la información de un registro específico en nuestra base de datos mediante el uso de Eloquent desde Tinker. En primer lugar, localizamos el registro que deseamos actualizar mediante el uso del método “find”. Como ejemplo, buscaremos los datos del profesor con el “id” igual a 1.
$profesor = Profesor::find(1);
Una vez que hemos identificado el registro específico, podemos realizar la actualización de la información contenida en el mismo.
$profesor->nombre_apellido = 'Juan Daniel Suarez Matos';
$profesor->grado_academico = 'Master';
Finalmente, utilizamos el objeto $profesor para invocar la función save() para guardar los cambios realizados en la tabla correspondiente.
$profesor->save();
Del mismo modo, podemos actualizar la información de las tablas “Alumnos” y “Cursos” utilizando el método “find” o su equivalente el método “findOrFail”.
Eliminar registros con Eloquent
Ahora, veremos como eliminar la información de un registro específico en nuestra base de datos mediante el uso de Eloquent desde Tinker. En primer lugar, localizamos el registro que deseamos actualizar mediante el uso del método “find”. Como ejemplo, buscaremos los datos del alumno con el “id” igual a 2.
$alumno = Alumno::find(2);
Invocamos al método “delete” para eliminar el registro en la tabla correspondiente.
$alumno->delete();
Igualmente, podemos eliminar datos de las tablas ‘Profesores’ y ‘Cursos’ mediante el método ‘delete’. Es importante destacar que cuando la tabla está vinculada con otras tablas y tiene el atributo ‘cascade’ configurado, se eliminarán automáticamente todas sus relaciones.
Visualizar registros con Eloquent
Mediante Eloquent ORM, podemos recuperar información de la base de datos, equivalente a ejecutar consultas de selección en SQL. Eloquent dispone de varios métodos, los cuales exploraremos a continuación para realizar operaciones de consulta y obtener datos.
Para obtener todos los registros de nuestra tabla “Alumnos”, podemos utilizar uno de estos dos métodos “all” o “get”.
Alumno::all();
Alumno::get();
En caso de buscar un registró en particular podemos utilizar uno de estos métodos “find”, “findOrFail” o “where”.
Cuando existen relaciones entre tablas, es posible obtener información acerca de sus conexiones con otras tablas. Facilitando la recuperación de datos vinculados.
Hasta aquí la clase de hoy, en la siguiente clase veremos aún más el uso de Eloquent ORM desde tinker como generador de consultas. Hasta la siguiente clase.
Saludos y éxitos.
Victor Peña
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.