Datenbankmigrationen
Halte Änderungen am Datenbankschema übersichtlich, in der richtigen Reihenfolge und mit dem integrierten Migrationssystem nachvollziehbar.
Migration in der Anwendung erstellen
Migrationen gehören zur Anwendung und liegen üblicherweise unter App\Database\Migrations. Jede Klasse hat einen stabilen Bezeichner im Format YYYYMMDDHHMMSS_description und führt Schemaänderungen in up(Schema $schema) aus. Sobald eine Migration angewendet wurde, darf ihr Bezeichner nicht mehr geändert werden.
<?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);
});
}
}Migrationsklassen explizit registrieren
Registriere jede Migration als class-string im AppServiceProvider. MigrationRegistry prüft und sortiert den Bezeichner, ohne die Migration zu instanziieren. Bereits angewendete Migrationen und Statusabfragen müssen daher weder Migrationsinstanzen erzeugen noch deren Konstruktorabhängigkeiten auflösen.
<?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);
}
}Migrationen ausführen und Status prüfen
Führe ausstehende Migrationen über die CLI aus. database:migrate:status zeigt angewendete und ausstehende Migrationen sowie Bezeichner, die in der Migrationshistorie gespeichert sind, aber nicht mehr in der Anwendung registriert werden.
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:statusAngewendete Migrationshistorie stabil halten
Migrationen sind einseitig. Lemonade bietet keinen Rollback, kein down(), keine Batches, keine Checksummen, keine automatische Dateisystem-Erkennung und keine automatischen DDL-Transaktionen. Welche Schemaoperationen verfügbar sind, hängt vom konfigurierten Datenbanktreiber und Dialekt ab.