Migraciones de base de datos
Mantén los cambios del esquema de la base de datos claros, ordenados y registrados con el sistema de migraciones integrado.
Crea una migración en la aplicación
Las migraciones pertenecen a la aplicación y, por convención, se ubican en App\Database\Migrations. Cada clase tiene un identificador estable con el formato YYYYMMDDHHMMSS_description y aplica los cambios de esquema en up(Schema $schema). Una vez aplicada una migración, no cambies su identificador.
<?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);
});
}
}Registra las clases de migración explícitamente
Registra cada migración como class-string en AppServiceProvider. MigrationRegistry valida y ordena el identificador sin instanciar la migración. Por eso, las migraciones ya aplicadas y las consultas de estado no necesitan crear sus instancias ni resolver las dependencias del constructor.
<?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);
}
}Ejecuta las migraciones y revisa su estado
Ejecuta las migraciones pendientes desde la CLI. database:migrate:status muestra las migraciones aplicadas y pendientes, además de los identificadores guardados en el historial que ya no están registrados en la aplicación.
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:statusMantén estable el historial aplicado
Las migraciones son unidireccionales. Lemonade no ofrece rollback, down(), batches, checksums, descubrimiento automático en el sistema de archivos ni transacciones DDL automáticas. Las operaciones de esquema disponibles dependen del driver y del dialecto de base de datos configurados.