DEV Community

Pradeep Kumar
Pradeep Kumar

Posted on

Error Free Laravel Migrations

If you're trying to modify database table, use following code for migrations:

<?php

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

class [class_name] extends Migration
{

    public function table()
    {
        return '[table_name]';
    }

    public function columns()
    {
        return [
            [
                "type"=>"integer",
                "column"=>"[column_name]",
                "after"=>"[after_column_name] (optional)",
            ]
        ];
    }

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {

        $table = $this->table();
        $list = $this->columns();

        foreach ($list as $item)
        {
            if(!Schema::hasColumn($table, $item['column'])){
                Schema::table($table, function (Blueprint $table) use ($item)
                {
                    $type = $item['type'];
                    $column = $item['column'];
                    if(isset($item['after']))
                    {
                        $table->$type($column)->nullable()->after($item['after']);
                    } else
                    {
                        $table->$type($column)->nullable();
                    }
                });
            }
        }

    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        $table = $this->table();
        $list = $this->columns();
        foreach ($list as $item)
        {
            if(Schema::hasColumn($table, $item['column'])){
                Schema::table($table, function (Blueprint $table) use ($item)
                {
                    $column = $item['column'];
                    $table->dropColumn($column);
                });
            }
        }
    }
}


Enter fullscreen mode Exit fullscreen mode

Oldest comments (0)