December 7, 2016 —John Koster
The make:migration
command is used to generate a new migration class. Generated migrations are (by default) stored in the database/migrations
directory. The make:migration
defines a few parameters and options that can be used to customize the generated migration. The following table details these options:
Option | Default | Description |
---|---|---|
name |
None. Must be supplied. | The name of the new migration file. |
--create= |
None. | The name of the table to be created. |
--table= |
None. Will assume the value of --create no value is set for --table and a value exists for --create . |
The name of the table to be modified. |
--path= |
database/migrations/ |
The directory to store the new migration file in. |
The --create
and --table
options generally will not be used together. Using the --create
option the new migration will be structured to create a new database table while using the --table
will generate a migration for modifying an existing table with the value set. The behavior of the --create
option will take precedence if both options are supplied.
The following examples demonstrate how to call the make:migration
command and the example files that are produced.
The following example will simply generate an empty migration implementation:
1php artisan make:migration create_drinks_table
the resulting PHP file would look similar to the following:
1<?php 2 3use Illuminate\Database\Schema\Blueprint; 4use Illuminate\Database\Migrations\Migration; 5 6class CreateDrinksTable extends Migration 7{ 8 /** 9 * Run the migrations.10 *11 * @return void12 */13 public function up()14 {15 //16 }17 18 /**19 * Reverse the migrations.20 *21 * @return void22 */23 public function down()24 {25 //26 }27}
The following example will generate a migration to create a new database table named drinks
:
1php artisan make:migration create_drinks_table --create=drinks
the resulting PHP file would look similar to the following:
1<?php 2 3use Illuminate\Database\Schema\Blueprint; 4use Illuminate\Database\Migrations\Migration; 5 6class CreateDrinksTable extends Migration 7{ 8 /** 9 * Run the migrations.10 *11 * @return void12 */13 public function up()14 {15 Schema::create('drinks', function (Blueprint $table) {16 $table->increments('id');17 $table->timestamps();18 });19 }20 21 /**22 * Reverse the migrations.23 *24 * @return void25 */26 public function down()27 {28 Schema::drop('tacos');29 }30}
The following example will generate a migration to alter a database table named drinks
:
1php artisan make:migration add_name_to_drinks_table --table=drinks
the resulting PHP file would look similar to the following:
1<?php 2 3use Illuminate\Database\Schema\Blueprint; 4use Illuminate\Database\Migrations\Migration; 5 6class AddNameToDrinksTable extends Migration 7{ 8 /** 9 * Run the migrations.10 *11 * @return void12 */13 public function up()14 {15 Schema::table('drinks', function (Blueprint $table) {16 //17 });18 }19 20 /**21 * Reverse the migrations.22 *23 * @return void24 */25 public function down()26 {27 Schema::table('drinks', function (Blueprint $table) {28 //29 });30 }31}
The following example would generate an empty migration implementation in a different directory than the configured default:
1php artisan make:migration create_drinks_table --path=database/setup_migrations
When using the --path
option the directory must already exist. The make:migration
command will not create the directory for you and will fail with an ErrorException
.
the resulting PHP file would look similar to the first example, but just in a different directory.
Running the make:migration
command multiple times will not generate an error when the command is ran. A new migration file (with a different timestamp prefix) will be generated each time. Be aware that with most database engines migrations will fail when attempting to create a table that already exists.
∎
The following amazing people help support this site and my open source projects ♥️
If you're interesting in supporting my work and want to show up on this list, check out my GitHub Sponsors Profile.