Návod

Databázové migrace

Změny databázového schématu drž přehledné, ve správném pořadí a evidované pomocí vestavěných migrací.

Vytvoř migraci v aplikaci

Migrace patří do aplikace, standardně do App\Database\Migrations. Každá třída má stabilní identifikátor ve formátu YYYYMMDDHHMMSS_description a změny schématu provádí v up(Schema $schema). Jakmile je migrace jednou aplikovaná, její identifikátor už neměň.

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);
        });
    }
}

Třídy migrací registruj explicitně

Každou migraci registruj jako class-string v AppServiceProvider. MigrationRegistry identifikátor ověří a zařadí bez vytváření instance migrace. Už aplikované migrace ani kontrola stavu proto nevyžadují vytvoření jejich instancí ani načtení konstruktorových závislostí.

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);
    }
}

Spusť migrace a zkontroluj stav

Čekající migrace spouštěj přes CLI. database:migrate:status zobrazí aplikované a čekající migrace i identifikátory, které jsou uložené v historii, ale už nejsou v aplikaci registrované.

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

Historii migrací po aplikaci neměň

Migrace jsou jednosměrné. Lemonade neposkytuje rollback, down(), batche, checksumy, automatické vyhledávání migrací v souborovém systému ani automatické DDL transakce. Dostupné operace nad schématem se řídí možnostmi nakonfigurovaného databázového driveru a dialektu.