<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Limpia datos huérfanos y agrega foreign key con ON DELETE CASCADE
*/
final class Version20251120135540 extends AbstractMigration
{
public function getDescription(): string
{
return 'Limpia TipoDestacado y Destacado huérfanos, y agrega foreign key con ON DELETE CASCADE en tipo_destacado.categoria_id';
}
public function up(Schema $schema): void
{
// 1. Eliminar Destacado huérfanos primero (dependen de TipoDestacado)
// Destacado cuyo tipo_destacado_id apunta a TipoDestacado que no existen
$this->addSql('DELETE d FROM destacado d
LEFT JOIN tipo_destacado td ON d.tipo_destacado_id = td.id
WHERE td.id IS NULL');
// Destacado cuyo tipo_destacado_id apunta a TipoDestacado con categorías eliminadas
$this->addSql('DELETE d FROM destacado d
INNER JOIN tipo_destacado td ON d.tipo_destacado_id = td.id
INNER JOIN categoria c ON td.categoria_id = c.id
WHERE c.deleted_at IS NOT NULL');
// 2. Eliminar TipoDestacado huérfanos (que apuntan a categorías eliminadas)
$this->addSql('DELETE td FROM tipo_destacado td
INNER JOIN categoria c ON td.categoria_id = c.id
WHERE c.deleted_at IS NOT NULL');
}
public function down(Schema $schema): void
{
// Nota: No se pueden restaurar los datos huérfanos eliminados
}
}