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ěň.
<?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í.
<?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é.
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:statusHistorii 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.