Agregar columnas a una tabla en producción en Laravel

Insertar una nueva columna en una tabla de un proyecto en producción en proyecto laravel y sql.

Por su puesto, lo ideal es diseñar las bases de datos basado en todos los requerimientos. Pero en algunas ocasiones los requerimientos llegan después.

Para agregar columnas a una tabla ya creada, procederemos a crear una migración o varias migraciones.

Advertencia

Cada migración al ser ejecutada ya no se puede modificar. Podemos agregar mas columnas al archivo «migrate», pero no podemos ejecutarlo con artisan. Y por supuesto, en producción no podemos simplemente ejecutar:

php artisan migrate:fresh

Este comando resetea toda la base de datos y crea las tablas vacias.

Crear migración de actualización

php artisan make:migration add_column_to_name_table --table=name

En este comando, prestemos atención a lo que debemos colocar. En add_column_to_name_table, column: será el nombre de la columna o migración y name: será el nombre de la tabla.

Si por ejemplo, la nueva columna se llamará «telefono» en la tabla «clientes», el comando sería como este:

php artisan make:migration add_telefono_to_clientes_table --table=clientes

Una vez creado esta migración, veremos los métodos up() y down(). up() será para agregar la migración y down() cuando se ejecute un rollback.

public function up()
    {
        Schema::table('clientes', function (Blueprint $table) {
        
            $table->string("telefono");
        });
    }

Una vez terminado, vamos a ejecutar la migración «php artisan migrate», lo cual agregará la columna a la tabla.

Finalmente solo necesitas implementar el método down() por si quieres hacer un rollback.

$table->dropColumn(‘nombre_columna’);

public function down()
    {
        Schema::table('clientes', function (Blueprint $table) {
            $table->dropColumn(‘telefono’);
        });
    }

Por unFuturista

Vemos el futuro, no para cambiarlo sino para cumplirlo.

2 comentarios

Dejar un comentario

Tu dirección de correo electrónico no será publicada.