Milind Daraniya

Update Existing Table's Column with Migration Without Losing Data in Laravel

Published August 24th, 2023 14 min read

In this tutorial, we'll explore how to update an existing table's column using a migration in Laravel 10 without losing any data. Migrations are a powerful way to manage your database schema, and we'll show you how to perform this task safely. Let's get started!

Step 1: Create a New Migration
To update the existing table's column, we'll create a new migration. Run the following command in your terminal to generate a new migration file:

php artisan make:migration update_table_column --table=your_table_name

Replace your_table_name with the actual name of the table you want to modify.

Step 2: Define the Column Update in the Migration
Open the newly created migration file, located in the database/migrations directory. In the up method, use the change method with the table method to perform the column update.

For example, let's say we want to update the price column of a products table from integer to decimal(8,2). Our migration file would look like this:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class UpdateTableColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->decimal('price', 8, 2)->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('products', function (Blueprint $table) {
            // Revert the column change if needed
            $table->integer('price')->change();
        });
    }
}

Step 3: Run the Migration
Now, it's time to run the migration using the following command:

php artisan migrate

This will apply the column update to the specified table without losing any data.

Step 4: Test the Migration
After running the migration, your products table's price column will be updated to a decimal type. Any existing data in the price column will be preserved during the migration process.

Congratulations! 🎉 You've successfully updated an existing table's column with a migration in Laravel 10 without losing any data.

Please Note: While Laravel migrations are designed to preserve data during column updates, it's always a good practice to create a backup of your database before running any critical migrations.