Cómo Agregar una Nueva Columna en las Migraciones de Laravel

Para poder añadir una nueva columna a la base de datos mediante las migraciones de laravel, debes crear una nueva migración y usando la misma tabla agregar una columna como en cualquier migración.

Crear una Nueva Migración

Para crear una nueva migración debes usar el siguiente comando.

php artisan make:migration [migration_name]
Comando de Laravel para Crear una Migración

Asegúrate de colocar un nombre que tenga relación con lo que estás haciendo, de manera que no se confunda con otras migraciones.

Agregar una Nueva Columna a la Tabla

Una vez has creado la migración, vamos a crear la columna sin antes mencionar que la forma de agregar nuevas columnas depende de si tu proyecto está en producción o no.

Nueva Columna en Producción

Si tu ambiente se encuentra en producción, debes crear una columna que pueda ser nula y posteriormente actualizar los valores según los datos tengas.

A continuación, te muestro un ejemplo de cómo hacerlo.

<?php use App\Models\User; use Carbon\Carbon; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddNewColumnBirthdayToUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->date('birthday')->nullable(); }); $users = User::all(); $users->each(function ($user) { $user->update([ 'birthday' => Carbon::now()->subYears(rand(18, 50)) ]); }); Schema::table('users', function (Blueprint $table) { $table->date('birthday')->nullable(false); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('birthday'); }); } }
Nueva Columna en Producción

Cómo puedes ver, primero se creó la columna, luego se actualizó los valores y finalmente se quitó el nullable si de ser necesario.

Nueva Columna en Desarrollo

Por otro lado, si estás en desarrollo, puedes crear la columna y simplemente volver a ejecutar las migraciones, seeders y demás.

A continuación, un ejemplo de cómo hacerlo.

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddNewColumnBirthdayToUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->date('birthday'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('birthday'); }); } }
Nueva Columna en Desarrollo

Ejecutar la Migración

Finalmente, ejecutamos la migración usando el siguiente comando.

php artisan migrate
Comando de Laravel para Ejecutar las Migraciones

Esto hará que únicamente se ejecuten las migraciones que aún no han sido registradas en la base de datos por lo que solo se ejecutará la migración que creaste recientemente.

Por otro lado, si estás en desarrollo, te recomiendo usar el siguiente comando para correr todas las migraciones y seeders nuevamente.

php artisan migrate:fresh --seed
Comando de Laravel para Recrear las Migraciones y Seeders