CakePHP 3 migracje

W niniejszym artykule opiszę obsługę migracji w CakePHP 3. Migracje w CakePHP 3 zostały wydzielone jako osobna wtyczka i są nakładką dla Phinx. Należy rozpocząć od instalacji za pomocą composera.

composer require cakephp/migrations "@stable"
Kolejnym krokiem jest załadowanie plugina w pliku src/Application.php
$this->addPlugin('Migrations');
//dla wersji 3.6.0 i starszych
//Plugin::load('Migrations');
Tworzenie pierwszej migracji
Stworzymy pierwszy plik migracji, a potem dodamy w nim tworzenie tabeli posts. Do stworzenia takiego pliku służy poniższa komenda.
bin/cake migrations create PostsTable
Otwórzmy sobie teraz "wypieczony" plik migracji. Jego zawartość jest następująca.
use Phinx\Migration\AbstractMigration;
 
class CreatePostsTable extends AbstractMigration
{
    /**
     * Change Method.
     *
     * More information on this method is available here:
     * http://docs.phinx.org/en/latest/migrations.html#the-change-method
     *
     * Uncomment this method if you would like to use it.
     *
    public function change()
    {
    }
    */
    
    /**
     * Migrate Up.
     */
    public function up()
    {
    
    }
 
    /**
     * Migrate Down.
     */
    public function down()
    {
 
    }
}
Teraz uzupełniamy naszą migrację tak aby po jej uruchomieniu tworzyła nową tabelę w bazie danych posts. Należy to wpisać w funkcji up. Funkcja down wywoływana jest natomiast podczas cofania migracji (rollback). W funkcji down usuwamy tabelę posts.
public function up()
{
	$table = $this->table('posts');
	$table->addColumn('title', 'string', [
            'default' => null,
            'limit' => 255,
            'null' => false,
        ]);
        $table->addColumn('description', 'text', [
            'default' => null,
            'null' => false,
        ]);
        $table->addColumn('created', 'datetime', [
            'default' => null,
            'null' => false,
        ]);
        $table->addColumn('modified', 'datetime', [
            'default' => null,
            'null' => false,
        ]);
	$table->create();
}

public function down()
{
	$this->dropTable('posts');
}
W celu uruchomienia migracji należy w konsoli wydać poniższe polecenie.
bin/cake migrations migrate
Migracja ta utworzy nową tabelę w bazie o nazwie posts z kolumnami: id (integer) primary key - kolumna jest dodawana zawsze, title typu string, description typu text, created oraz modified oba typu datetime. Ogólnie powyższe polecenie uruchomi wszystkie nie uruchamiane do tej pory migracje. Jeśli chcemy cofnąć ostatnią migrację należy wydać poniższą komendę.
bin/cake migrations rollback
Przyjrzyjmy się teraz innym poleceniom konsolowym w związku z migracjami. Poniższe polecenie uruchamia konkretnę migrację. Podany czas jest prefixem pliku migracji.
bin/cake migrations migrate -t 20180403081032
Podobnie aby cofnąć wybraną migrację wydajemy w konsoli polecenie.
bin/cake migrations rollback -t 20180403081032
Komenda status wypisuje stan wszystkich migracji.
bin/cake migrations status
Czasem możesz chcieć oznaczyć jakąś migrację jako zmigowaną bez uruchomienia jej np. jeśli sam wprowadziłeś odpowiednie zmiany w bazie danych. Do tego celu służą poniższe polecenia. Oznacza wszystkie migracje jako zmigrowane.
bin/cake migrations mark_migrated
Oznacza wszystkie migracje od konkretnej migracji jako zmigrowane.
bin/cake migrations mark_migrated --target=20180403081032
Oznacza jedną konkretną migrację jako zmigrowaną.
bin/cake migrations mark_migrated --target=20180403081032 --only