Przewodnik

Migracje bazy danych

Utrzymuj zmiany schematu bazy danych w czytelnej, właściwej kolejności i zapisuj je za pomocą wbudowanego systemu migracji.

Utwórz migrację w aplikacji

Migracje należą do aplikacji i standardowo znajdują się w App\Database\Migrations. Każda klasa ma stabilny identyfikator w formacie YYYYMMDDHHMMSS_description i wykonuje zmiany schematu w up(Schema $schema). Po zastosowaniu migracji nie zmieniaj już jej identyfikatora.

example.php
<?php

declare(strict_types=1);

namespace App\Database\Migrations;

use Lemonade\Framework\Database\Migration\MigrationInterface;
use Lemonade\Framework\Database\Schema\Schema;

final class CreateUsersTable implements MigrationInterface
{
    public static function identifier(): string
    {
        return '20260908090000_create_users';
    }

    public function up(Schema $schema): void
    {
        $schema->create('users', static function ($table): void {
            $table->id();
            $table->string('email', 255);
            $table->string('password', 255);
        });
    }
}

Rejestruj klasy migracji jawnie

Każdą migrację rejestruj jako class-string w AppServiceProvider. MigrationRegistry sprawdza i porządkuje identyfikator bez tworzenia instancji migracji. Dzięki temu zastosowane migracje i sprawdzanie statusu nie wymagają tworzenia ich instancji ani rozwiązywania zależności konstruktora.

example.php
<?php

declare(strict_types=1);

namespace App\Providers;

use App\Database\Migrations\CreateUsersTable;
use Lemonade\Framework\Container\ContainerInterface;
use Lemonade\Framework\Core\ServiceProviderInterface;
use Lemonade\Framework\Database\Migration\MigrationRegistry;

final class AppServiceProvider implements ServiceProviderInterface
{
    public function register(ContainerInterface $container): void
    {
        $registry = $container->get(MigrationRegistry::class);

        $registry->register(CreateUsersTable::class);
    }
}

Uruchom migracje i sprawdź ich status

Uruchamiaj oczekujące migracje przez CLI. database:migrate:status pokazuje migracje zastosowane i oczekujące oraz identyfikatory zapisane w historii, które nie są już zarejestrowane w aplikacji.

example.php
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:status

Nie zmieniaj historii zastosowanych migracji

Migracje są jednokierunkowe. Lemonade nie udostępnia rollbacku, down(), batchy, checksumów, automatycznego wykrywania migracji w systemie plików ani automatycznych transakcji DDL. Dostępne operacje na schemacie zależą od skonfigurowanego sterownika i dialektu bazy danych.