Artisan CLI — tu mejor amigo
Domina Artisan, la poderosa herramienta de línea de comandos de Laravel: genera código, ejecuta migraciones, limpia cachés y crea tus propios comandos.
¿Qué es Artisan?
Artisan es la interfaz de línea de comandos (CLI) incluida en Laravel. Es una herramienta increíblemente poderosa que te permite realizar decenas de tareas sin abrir el editor: generar código, gestionar migraciones, limpiar cachés, ejecutar seeders, crear comandos personalizados y mucho más.
Para ver todos los comandos disponibles:
php artisan list
Para obtener ayuda sobre un comando específico:
php artisan help make:controller
Comandos más usados — Referencia rápida
Servidor de desarrollo
# Arranca el servidor en http://localhost:8000
php artisan serve
# Especificar host y puerto
php artisan serve --host=0.0.0.0 --port=9000
Información del proyecto
# Ver la versión de Laravel
php artisan --version
# Ver todas las rutas registradas
php artisan route:list
# Ver rutas filtradas por nombre
php artisan route:list --name=article
# Ver solo las rutas de la API
php artisan route:list --path=api
Generadores de código — make:
Los comandos make: son los más útiles del día a día. Generan archivos con la estructura básica correcta para que no tengas que escribirlos desde cero.
Controladores
# Controlador básico
php artisan make:controller ArticleController
# Controlador de recursos (con métodos index, create, store, show, edit, update, destroy)
php artisan make:controller ArticleController --resource
# Controlador de API (sin métodos create y edit, que son formularios HTML)
php artisan make:controller Api/ArticleController --api
# Controlador invocable (un solo método __invoke)
php artisan make:controller ShowDashboardController --invokable
Modelos
# Solo el modelo
php artisan make:model Article
# Modelo con migración
php artisan make:model Article -m
# Modelo con migración, factory y seeder
php artisan make:model Article -mfs
# Modelo completo (migración, factory, seeder, controlador de recursos, form requests)
php artisan make:model Article --all
Migraciones
# Crear una migración nueva
php artisan make:migration create_articles_table
# Migración para agregar columnas a una tabla existente
php artisan make:migration add_published_at_to_articles_table
# Laravel detecta el nombre y crea la estructura correcta automáticamente
Seeders y Factories
# Crear un seeder
php artisan make:seeder ArticleSeeder
# Crear una factory
php artisan make:factory ArticleFactory
Middleware
# Crear middleware
php artisan make:middleware EnsureUserIsAdmin
Form Requests (validación)
# Crear un Form Request
php artisan make:request StoreArticleRequest
php artisan make:request UpdateArticleRequest
Eventos, Listeners y Jobs
# Eventos
php artisan make:event ArticlePublished
# Listener
php artisan make:listener SendPublishedNotification --event=ArticlePublished
# Job para colas de trabajo
php artisan make:job ProcessArticleImages
Gestión de migraciones
# Ejecutar todas las migraciones pendientes
php artisan migrate
# Ver el estado de las migraciones
php artisan migrate:status
# Deshacer la última migración (o lote)
php artisan migrate:rollback
# Deshacer N lotes
php artisan migrate:rollback --step=2
# Deshacer todas y volver a migrar
php artisan migrate:refresh
# Borrar todas las tablas y migrar desde cero
php artisan migrate:fresh
# Migrar y ejecutar seeders
php artisan migrate:fresh --seed
El comando que más usarás en desarrollo es:
php artisan migrate:fresh --seed
Te permite empezar con una base de datos limpia y datos de prueba en segundos.
Seeders — poblar la base de datos
# Ejecutar todos los seeders (DatabaseSeeder)
php artisan db:seed
# Ejecutar un seeder específico
php artisan db:seed --class=ArticleSeeder
Gestión de caché
# Limpiar la caché de la aplicación
php artisan cache:clear
# Limpiar la caché de rutas
php artisan route:clear
# Limpiar la caché de vistas Blade compiladas
php artisan view:clear
# Limpiar la caché de configuración
php artisan config:clear
# Limpiar todo de una vez
php artisan optimize:clear
# Cachear configuración, rutas y vistas (para producción)
php artisan optimize
En desarrollo, si cambias algo en config/ o en .env y no se aplica, ejecuta:
php artisan config:clear
Tinker — la consola interactiva
Tinker es una de las herramientas más útiles de Laravel. Te abre una consola PHP interactiva (REPL) con acceso completo a tu aplicación:
php artisan tinker
Dentro de Tinker puedes hacer prácticamente cualquier cosa:
// Crear un usuario de prueba
>>> User::create(['name' => 'Test', 'email' => 'test@test.com', 'password' => bcrypt('password')]);
// Consultar la base de datos
>>> User::all()->count();
=> 5
>>> Article::where('published', true)->latest()->first();
// Probar helpers
>>> now()->addDays(7)->format('d/m/Y');
=> "23/04/2024"
// Probar el envío de correos
>>> Mail::to('test@test.com')->send(new App\Mail\WelcomeMail());
// Salir de Tinker
>>> exit
Tinker es perfecto para depurar sin escribir rutas de prueba y para explorar la API de Eloquent.
Comandos de colas y tareas programadas
# Procesar las colas de trabajo
php artisan queue:work
# Procesar la cola con reintentos
php artisan queue:work --tries=3
# Ver los trabajos fallidos
php artisan queue:failed
# Reintentar trabajos fallidos
php artisan queue:retry all
# Ejecutar las tareas programadas (para usar con cron)
php artisan schedule:run
# Ejecutar el scheduler en modo desarrollo (sin cron)
php artisan schedule:work
Crear tus propios comandos Artisan
Una de las funciones más potentes de Artisan es que puedes crear tus propios comandos personalizados:
php artisan make:command EnviarResumenSemanal
Esto crea el archivo app/Console/Commands/EnviarResumenSemanal.php:
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\User;
use App\Mail\WeeklySummaryMail;
use Illuminate\Support\Facades\Mail;
class EnviarResumenSemanal extends Command
{
// El nombre y firma del comando
protected $signature = 'email:resumen-semanal {--dry-run : Solo muestra lo que haría sin enviar}';
// Descripción que aparece en php artisan list
protected $description = 'Envía el resumen semanal a todos los suscriptores';
public function handle(): void
{
$users = User::where('subscribed', true)->get();
if ($this->option('dry-run')) {
$this->info("Se enviaría el resumen a {$users->count()} usuarios.");
return;
}
$this->withProgressBar($users, function (User $user) {
Mail::to($user)->send(new WeeklySummaryMail($user));
});
$this->newLine();
$this->info('¡Resumen semanal enviado correctamente!');
}
}
Y lo ejecutas así:
# Modo prueba
php artisan email:resumen-semanal --dry-run
# Ejecución real
php artisan email:resumen-semanal
Comandos de mantenimiento
# Poner la aplicación en modo mantenimiento (muestra página de mantenimiento)
php artisan down
# Volver al modo normal
php artisan up
# Modo mantenimiento pero permitiendo tu IP
php artisan down --allow=192.168.1.100 --render="errors.503"
# Refrescar la caché de autoload de Composer
composer dump-autoload
Tabla resumen de comandos esenciales
| Comando | Qué hace |
|---|---|
php artisan serve | Servidor de desarrollo |
php artisan route:list | Ver todas las rutas |
php artisan make:model X -mfsc | Genera modelo con migracion, factory, seeder y controlador |
php artisan migrate | Ejecuta migraciones |
php artisan migrate:fresh --seed | BD limpia + datos de prueba |
php artisan tinker | Consola interactiva |
php artisan optimize:clear | Limpia toda la caché |
php artisan queue:work | Procesa trabajos en cola |
php artisan down / up | Modo mantenimiento |
Con Artisan dominas Laravel desde la terminal. En la siguiente lección escribirás tu primera ruta real y la harás responder con contenido de verdad.
Pon a prueba lo aprendido
Responde las preguntas para comprobar que has entendido los conceptos clave.
1. ¿Qué comando de Artisan genera un nuevo modelo junto con su migración y controlador de recursos?
2. ¿Qué comando de Artisan deshace la última migración ejecutada?
3. ¿Qué hace el comando "php artisan tinker"?