En este Laravel Tip vamos a ver como hacer para que tus seeds sean mas interactivas. ¿Qué significa esto? Que, una vez que corras tus seeds, podrás ingresar datos por medio de la consola para que tu seed responda de una forma o de otra. Vamos a ver como hacer esto.
Creando Seed
Primero vamos a crear una seed para usarla como ejemplo. Podemos crear la seed con un comando artisan:
php artisan make:seed UserSeeder
Este comando generará un nuevo archivo en /database/seeds/UserSeeder.php
, con la siguiente apariencia:
Haciendo interactivo a nuestro Seed
Ahora que ya hemos creado nuestro seed, es hora de hacerlo interactivo. 😉
Supongamos que nuestra aplicación manejará distintos tipos de usuarios como Admin, Proveedor y Vendedor, y queremos tener el control de que rol asignarle a cada usuario.
Para esto, vamos a utilizar un método de la propiedad $this->command
, de la siguiente forma:
Como se ve en la imagen, estamos utilizando el método choice()
que recibe como primer argumento un string con el mensaje que se mostrará al usuario de la consola y, como segundo argumento, recibe un arreglo con las opciones que estarán disponibles.
Cuando ejecutemos nuestra seed, se verá de la siguiente forma:
Laravel TIP: pasando el nombre de la clase a la opción –class, se ejecuta solo dicha seed.
Al ejecutar el seed, nos muestra el mensaje y nos da a elegir el rol que tendrá el usuario que se va a crear. Podes ingresar el numero de opción o el valor de la opción en si.
Si ingresas una opción que no existe en el listado, el sistema te mostrará un error de opción incorrecta y te permitirá volver a elegir una opción. ¡Simplemente, genial!
Otro ejemplo de Seed Interactiva
También, podemos pasar varios comandos al método create()
que se ejecutarán uno seguido del otro.
En este ejemplo vamos a hacer un alta de usuarios. Muy útil cuando no tenes ganas de hacer una interfaz gráfica para esto. 😄
En este ejemplo estamos usando dos métodos nuevos de $this->command
:
- Método
ask()
: Solicita al usuario datos para ser utilizados como datos de entrada. - Método
secret()
: Solicita al usuario que ingrese información, pero oculta la respuesta en la consola (algo parecido cuando ingresas la contraseña de tu usuario en una consola Linux).
Hay muchas métodos que son muy útiles para hacer nuestra seed interactiva. Acá mencionaremos algunos:
Más métodos para tus Seeds Interactivas
- anticipate(): El método anticipate se puede utilizar para proporcionar la finalización automática de posibles elecciones. El usuario todavía puede elegir cualquier respuesta, independientemente de las sugerencias de finalización automática.
- confirm(): Si necesita pedirle al usuario una confirmación simple, puede usar el método confirm. Por defecto, este método devolverá falso. Sin embargo, si el usuario ingresa y o yes en respuesta a la solicitud, el método devolverá verdadero.
- info(), line() y error(): Estos métodos sirven para mostrar un mensaje o información al usuario por consola. El método info() mostrará el mensaje en color verde, el método error() en rojo y line() lo mostrará sin color.
Versión disponible
Estos métodos para hacer tus seeds interactivos están disponibles de Laravel 5.1.
Conclusión
No solo podes crear seeds interactivas para operar por consola, también, imagina que puedes crearlo para que interactúen con otros procesos del sistema, como por ejemplo scripts bash. Tu creatividad es el limite. Te recomiendo jugar un rato con esto y seguramente en algún futuro, lo utilizaras. Saludos. 😉🤙