Database Migrations 5.0–5.3
This draft deletes the entire topic.
Examples
-
Each migration should have an
up()
method and adown()
method. The purpose of theup()
method is to perform the required operations to put the database schema in its new state, and the purpose of thedown()
method is to reverse any operations performed by theup()
method. Ensuring that thedown()
method correctly reverses your operations is critical to being able to rollback database schema changes.An example migration file may look like this:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddLastLoggedInToUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->dateTime('last_logged_in')->nullable(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('last_logged_in'); }); } }
When running this migration, Laravel will generate the following SQL to run against your database:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
-
To control your database in Laravel is by using migrations. Create migration with artisan:
php artisan make:migration create_first_table --create=first_table
This will generate the class CreateFirstTable. Inside the up method you can create your columns:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFirstTable extends Migration { public function up() { Schema::create('first_table', function (Blueprint $table) { $table->increments('id'); $table->string('first_string_column_name'); $table->integer('secont_integer_column_name'); $table->timestamps(); }); } public function down() { Schema::drop('first_table'); } }
At the end to run all of your migrations classes you can run the artisan command:
php artisan migrate
This will create your tables and your columns in your database. Other useful migrate command are:
php artisan migrate:rollback
- Rollback the last database migrationphp artisan migrate:reset
- Rollback all database migrationsphp artisan migrate:refresh
- Reset and re-run all migrationsphp artisan migrate:status
- Show the status of each migration
-
-
Creating a new migration file with the correct filename every time you need to change your schema would be a chore. Thankfully, Laravel's
artisan
command can generate the migration for you:php artisan make:migration add_last_logged_in_to_users_table
You can also use the
--table
and--create
flags with the above command. These are optional and just for convenience, and will insert the relevant boilerplate code into the migration file.php artisan make:migration add_last_logged_in_to_users_table --table=users php artisan make:migration create_logs_table --create=logs
You can specify a custom output path for the generated migration using the
--path
option. The path is relative to the application's base path.php artisan make:migration --path=app/Modules/User/Migrations
-
What if you want to rollback the latest migration i.e recent operation, you can use the awesome
rollback
command. But remember that this command rolls back only the last migration, which may include multiple migration filesphp artisan migrate:rollback
If you are interested in rolling back all of your application migrations, you may use the following command
php artisan migrate:reset
Moreover if you are lazy like me and want to rollback and migrate with one command, you may use this command
php artisan migrate:refresh php artisan migrate:refresh --seed
-
Once your migration is written, running it will apply the operations to your database.
php artisan migrate
If all went well, you'll see an output similar to the below:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel is clever enough to know when you're running migrations in the production environment. If it detects that you're performing a destructive migration (for example, one that removes a column from a table), the
php artisan migrate
command will ask you for confirmation. In continuous delivery environments this may not be wanted. In that case, use the--force
flag to skip the confirmation:php artisan migrate --force
If you've only just run migrations, you may be confused to see the presence of a
migrations
table in your database. This table is what Laravel uses to keep track of what migrations have already been run. When issuing themigrate
command, Laravel will determine what migrations have yet to run, and then execute them in chronological order, and then update themigrations
table to suit.You should never manually edit the
migrations
table unless you absolutely know what you're doing. It's very easy to inadvertently leave your database in a broken state where your migrations will fail. -
Migrations in a Laravel 5 application live in the
database/migrations
directory. Their filenames conform to a particular format:<year>_<month>_<day>_<hour><minute><second>_<name>.php
One migration file should represent a schema update to solve a particular problem. For example:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Database migrations are kept in chronological order so that Laravel knows in which order to execute them. Laravel will always execute migrations from oldest to newest.
Topic Outline
Sign up or log in
Save edit as a guest
Join Stack Overflow
Using Google
Using Facebook
Using Email and Password
We recognize you from another Stack Exchange Network site!
Join and Save Draft