Como añadir una columna a varias tablas de golpe con Laravel
Diego
Posted on May 31, 2024
Imagínate que llevas un tiempo creando tu proyecto. Y tienes muchas tablas ya desarrolladas. De repente te das cuenta que te falta una columna en un grupo de ellas. Por ejemplo, quieres tener una columna "completado".
La opción trivial, es ir creando una migración para cada una de las tablas, para crearles esa columna.
Pero gracias a Laravel, podemos crear una migración donde añada esa columna a todas las tablas. En mi caso, será a todas las tablas que comienzan por "C_".
Aquí tenéis el código:
Creamos la migración
php artisan make:migration add_completado_to_all_c_tables --table=users
Modificamos la migración:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
class AddCompletadoToAllCTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Obtener todas las tablas que comienzan con 'C_'
$tables = DB::connection()->getDoctrineSchemaManager()->listTableNames();
$cTables = array_filter($tables, function($table) {
return strpos($table, 'C_') === 0;
});
// Añadir la columna 'completado' a cada tabla
foreach ($cTables as $table) {
Schema::table($table, function (Blueprint $table) {
$table->boolean('completado')->default(0)->after('id'); // Ajusta 'after' según sea necesario
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// Eliminar la columna 'completado' de cada tabla
$tables = DB::connection()->getDoctrineSchemaManager()->listTableNames();
$cTables = array_filter($tables, function($table) {
return strpos($table, 'C_') === 0;
});
foreach ($cTables as $table) {
Schema::table($table, function (Blueprint $table) {
$table->dropColumn('completado');
});
}
}
}
Ejecutamos la migración
php artisan migrate
De esta forma, le añadiremos la columna "completado" a todas las tablas de nuestra base de datos que comienzan por "C_".
Oh yeah!
💖 💪 🙅 🚩
Diego
Posted on May 31, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.