Quick Tip for Migrations: Check if Table/Column Already Exists

Sometimes, especially in bigger projects, we run into issue of writing a create migration for the same table, or even column that already exist. Luckily, Laravel has a quick way of checking it.

Typical migration looks like this:

public function up()
{
  Schema::create('flights', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('airline');
    $table->timestamps();
  });
}

And if flights table already exists (for whatever reason), you would get an error. Solution to this is Schema::hasTable() method.

public function up()
{
  if (!Schema::hasTable('flights')) {
    Schema::create('flights', function (Blueprint $table) {
      $table->increments('id');
      $table->string('name');
      $table->string('airline');
      $table->timestamps();
    });
  }
}

So, if table flights does not exist, then we create it.

Of course, it can be used in a positive way - for example, if we want to add a new column to existing table, then we may check if table does exist.

Let's combine this with another example and with another method Schema::hasColumn(), which has two parameters - table name and column name.

public function up()
{
  if (Schema::hasTable('flights')) {
    Schema::table('flights', function (Blueprint $table) {
      if (!Schema::hasColumn('flights', 'departure_time')) {
    $table->timestamp('departure_time');
      }
    });
  }
}

You can read more about migrations and its various features in the official documentation.

No comments or questions yet...

Like our articles?

Become a Premium Member for $129/year or $29/month
What else you will get:
  • 68 courses (1188 lessons, total 43 h 18 min)
  • 90 long-form tutorials (one new every week)
  • access to project repositories
  • access to private Discord

Recent New Courses