DEV Community

Cover image for Como añadir una columna a varias tablas de golpe con Laravel
Diego
Diego

Posted on

Como añadir una columna a varias tablas de golpe con Laravel

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

Enter fullscreen mode Exit fullscreen mode

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');
            });
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

Ejecutamos la migración

php artisan migrate

Enter fullscreen mode Exit fullscreen mode

De esta forma, le añadiremos la columna "completado" a todas las tablas de nuestra base de datos que comienzan por "C_".

Oh yeah!

Top comments (0)