Migrations ​
Database migrations are like version control for your database. They allow you to easily create, modify, or delete tables and columns in your database in a structured way, without having to manually write SQL queries.
When you make changes to your database like adding a new table or column, modifying an existing column's data type, or changing a relationship between tables, database migrations allow you to propagate those changes to all instances of your database.
Generating Migrations ​
Leaf MVC provides a simple way to generate migrations using the g:migration command:
php leaf g:migration <Name>
# example
php leaf g:migration flightsThe new migration will be placed in your app/database/migrations directory. Each migration file name begins with a timestamp.
Migration Structure ​
A migration class contains two methods: up and down. The up method is used to add new tables, columns, or indexes to your database, while the down method should reverse the operations performed by the up method.
You can create and modify tables in the both of these methods. In this example, we create a posts table:
<?php
namespace App\Database\Migrations;
use Leaf\Database;
use Illuminate\Database\Schema\Blueprint;
class CreateUsers extends Database {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if (!$this->capsule::schema()->hasTable("posts")):
$this->capsule::schema()->create("posts", function (Blueprint $table) {
$table->increments('id');
$table->string('author_id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
endif;
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$this->capsule::schema()->dropIfExists("posts");
}
}Note
Instead of building your migrations from scratch, you can use Leaf's schema builder to generate migrations from JSON data. Learn more.
Running migrations ​
To run all of your outstanding migrations, execute the db:migrate command:
php leaf db:migrateYou may also run seeds alongside your migrations if you wish to do so:
php leaf db:migrate -s
# or
php leaf db:migrate --seedYou can also choose to run a specific migration file:
php leaf db:migrate -f usersRolling Back Migrations ​
To roll back the latest migration operation, you may use the db:rollback command.
php leaf db:rollbackYou may roll back a limited number of migrations by providing the step option to the rollback command. For example, the following command will roll back the last two migrations:
php leaf db:rollback -s 2To roll back all migrations, you can just pass all as the step option.
php leaf db:rollback --step allYou can also rollback a specific migration file:
php leaf db:rollback -f usersRefreshing Migrations ​
If you would like to reset your database and re-run all of your migrations with seeds, you may use the db:reset command. This command will drop all tables in your database and re-run all of your migrations:
php leaf db:resetIf you want to prevent seeds from running, you can use the --noSeed option:
php leaf db:reset --noSeed