Migraciones condicionales en Laravel con el nuevo método shouldRun()
- Publicado el 25 abril, 2025
- Palabras: 190
A veces, una migración puede estar diseñada para admitir una función que aún no está activa y no desea que se ejecute. En este caso, puede definir un método shouldRun en la migración.

Al trabajar con indicadores de características o implementaciones por fases, es posible que desee que ciertos cambios en la base de datos solo se apliquen cuando ciertas características estén activas. Anteriormente, esto requería soluciones alternativas complejas o la gestión manual de la migración. El nuevo método shouldRun() ofrece una solución elegante que permite que las migraciones decidan por sí mismas si deben ejecutarse. Veamos como funciona:
return new class extends Migration
{
public function shouldRun()
{
return Feature::active(Flights::class);
}
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('destination');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('flights');
}
}
Esta migración solo se ejecutará si la característica "Flights" está activa. Si no lo está, la migración se omitirá sin errores y la entrada no se añadirá a la tabla de migraciones.
#Ejemplo práctico
Esta función es especialmente útil para implementaciones graduales de funciones o aplicaciones multiusuario. A continuación, se muestra un ejemplo práctico con una aplicación SaaS:
// 2023_05_15_create_analytics_tables.php
return new class extends Migration
{
public function shouldRun()
{
// Ejecuta esta migración solo en entornos donde la característica analytics está habilitada.
return config('features.analytics') === true;
}
public function up()
{
Schema::create('analytics_events', function (Blueprint $table) {
$table->id();
$table->string('event_name');
$table->json('properties');
$table->timestamps();
});
Schema::create('analytics_reports', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->json('filters');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('analytics_reports');
Schema::dropIfExists('analytics_events');
}
};
El método shouldRun() se considera para los comandos de migración y reversión, lo que garantiza un comportamiento consistente en ambas direcciones. Si se omite una migración durante la migración, también se omitirá durante la reversión.
Al aprovechar el método shouldRun(), puede crear migraciones más flexibles y contextuales que se adapten a las necesidades de su aplicación, facilitando la gestión de las estrategias de marcado de características e implementación progresiva.
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión