Laravel cómo agregar columna a una tabla existente

Laravel cómo agregar columna a una tabla existente

Problema

Agregar nuevas columnas a sus migraciones de Laravel es algo común. Las aplicaciones están destinadas a ser escalables, lo que significa que agregar nuevas características desarrolla su aplicación más.

Muy a menudo, los nuevos desarrolladores de Laravel necesitan ejecutar sus migraciones, pero no se aseguran de que las migraciones puedan revertir y migrar varias veces sin romper nada.

Si bien ese no es nuestro enfoque, creo que era importante afirmar que antes de dirigirnos a nuestro problema.

El siguiente es un problema común que los nuevos desarrolladores de Laravel intentarán hacer cuando quieran agregar una nueva columna a una tabla existente.

Entonces, en este punto, ya hicieron algo como:

función pública up ()

Schema :: Create ('organizaciones', function ($ table)
$ table-> incrementos ('id');
$ table-> string ('name')-> nullable ();
$ table-> text ('sobre')-> nullable ();
);

Esto creará una nueva mesa para ellos. Y para limpiar esto, también debe agregar la función hacia abajo y simplemente dejar caer toda su mesa en este caso. La función hacia abajo se ejecutará cuando desee revertir su migración.

Saltando a través de todo eso, el verdadero problema aparece cuando olvidan una columna y quieren agregar eso después para que creen un nuevo archivo de migración (clase) intente ejecutar algo como:

función pública up ()

Schema :: Create ('organizaciones', function ($ table)
$ table-> entero ('size')-> nullable ();
);

Esperan agregar un nuevo tamaño de columna a la tabla existente.

Ahora veamos qué sucede y cómo evitar que eso vuelva a suceder.

Solución

El principal problema aquí es lo que los nuevos desarrolladores a menudo tienden a perderse notar cuál es el nombre del método estático del esquema . Solo usa Crear cuando inicialmente está creando su tabla. Si necesita actualizar más su tabla en cualquier momento, desea usar la tabla en su lugar.

Entonces, la función real debería ser así:

función pública up ()

Schema :: table ('organizaciones', function ($ table)
$ table-> entero ('size')-> nullable ();
);

Y la función de abajo sería así:

Función pública Down ()

Schema :: table ('organizaciones', function ($ table)
$ table-> dropcolumn ('size');
);

Mi sugerencia personal para usted es que después de crear su nuevo archivo de migración (alteración) haga lo siguiente:

  • Ejecutar la migración
  • Compruebe si la columna se agrega a la tabla
  • Reversión de la migración ejecutando PHP Artisan Migrate: Rollback
  • Asegúrate de que no pase nada
  • Repita el paso 2 y 3 nuevamente para asegurarse de que puede cerrar el círculo completo de migratio
  • norte

Otro consejo

Esto será útil en una etapa posterior si desea automatizar su implementación y su script debe ejecutar una reversión.

Otro consejo que puedo darte es planificar dónde quieres colocar tu columna. Con solo hacer esto, Laravel colocará su nueva columna al final, probablemente después de la columna actualizada_at. (La mayoría de las tablas tienen esto)

Desea usar un método después para que su código final se vea así:

función pública up ()

Schema :: table ('organizaciones', function ($ table)
$ table-> integer ('size')-> después ('name')-> nullable ();
);

En este caso, Laravel colocará su nueva columna justo después de la columna de nombre para que se vea bien y esté mucho mejor.