Imagen de Innova Labs en Pixabay

Llegó el día que terminaste ese gran proyecto que estabas desarrollando, ya esta montado en un servidor en producción y con una amplia sonrisa y cara de satisfacción ves que trabaja excelente y tu cliente esta muy contento con el resultado… luego pasan algunas semanas y tu cliente te habla y te dice que necesita realizar cambios a la base de datos que ya está en producción y tiene datos reales… en este tutorial te muestro cómo modificar tablas de una base de datos en producción en Laravel, te plantearé dos problemas reales. Manos a la obra.

Requisitos previos

  1. Tener un proyecto Laravel en producción (puedes hacer pruebas locales)
  2. Contar con repositorio GIT del proyecto
  3. Contar con acceso sudo al servidor vía SSH

Problema 1

En producción tengo una tabla llamada orders la cual tiene una relación con la tabla users, por error u omisión la columna en donde esta la llave foránea no se agrego la regla onDelete(‘cascade’) lo cual va a provocar que cuando un usuario quiera borrar de manera definitiva su cuenta arroje un error y no permita borrarla.

modificar tablas de una base de datos en producción en Laravel

Una de las soluciones a este problema es crear una nueva migración, pero esta migración no va a crear una nueva tabla en vez de eso la va a modificar, para ello estando en la raíz del proyecto ya sea vía SSH o en local escribe (o puedes probar en local):

php artisan make:migration new_fields_orders_table --table=orders

Con tu editor de texto abre la nueva migración, notarás que después de Schema no dice create sino Schema::table

En este nuevo archivo de migración se agrega las siguientes instrucciones:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class NewFieldsOrdersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->dropForeign(['user_id']);
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->change();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->removeColumn('user_id');
        });
    }
}

Al correr las migraciones con el comando php artisan migrate se agregará la regla ->onDelete(‘cascade’) en la columna de la llave foránea, al revisar esta tabla en la base de datos se puede ver el cambio. Esta es una manera de cómo modificar tablas de una base de datos en producción en Laravel.

Problema 2

Tengo una base de datos en producción con una tabla llamada products se le tiene que agregar una nueva columna, ésto sin que de surjan problemas con los registros actuales  por lo que la nueva columna será nullable.

modificar tablas de una base de datos en producción en Laravel

Al igual que en el problema anterior es necesario crear una nueva migración usando la misma nomenclatura solo cambiando el nombre de la tabla:

php artisan make:migration new_fields_products_table --table=products

En este archivo de migración se escriben las instrucciones para agregar la nueva columna:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class NewFieldsProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */

    public function up()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->boolean('activo')->nullable();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */

    public function down()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->removeColumn('activo');
        });
    }
}

Al correr las migraciones con el comando php artisan migrate los cambios se realizan en la base de datos.

Conclusión

Recuerda realizar un respaldo de tu base de datos en producción antes de intentar hacer cambios en la misma así te evitarás dolores de cabeza, te lo aseguro. Te mostré cómo modificar las tablas de una base de datos en producción en Laravel, sí este tutorial te ha servido te invito a compartirlo en tus redes sociales para llegar a más personas, si tienes dudas o comentarios déjalos en la caja de comentarios estaré al pendiente de ellos. Gracias por visitar!

2 COMENTARIOS

Responder a El CharlieCancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.