<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Final cleanup: Add missing FKs and remove unnecessary columns
*/
final class Version20251022103000 extends AbstractMigration
{
public function getDescription(): string
{
return 'Final cleanup - add missing FKs, remove unnecessary created/modified columns';
}
public function up(Schema $schema): void
{
// ============================================================
// Add missing Foreign Keys
// ============================================================
// ckimage
$this->connection->executeStatement("
SET @fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ckimage'
AND COLUMN_NAME = 'client_id' AND REFERENCED_TABLE_NAME IS NOT NULL);
SET @sql = IF(@fk = 0, 'ALTER TABLE ckimage ADD CONSTRAINT FK_461E85DD19EB6921 FOREIGN KEY (client_id) REFERENCES client (id)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// cart_item
$this->connection->executeStatement("
SET @fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'cart_item'
AND COLUMN_NAME = 'client_id' AND REFERENCED_TABLE_NAME IS NOT NULL);
SET @sql = IF(@fk = 0, 'ALTER TABLE cart_item ADD CONSTRAINT FK_F0FE252719EB6921 FOREIGN KEY (client_id) REFERENCES client (id)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// ============================================================
// Remove unnecessary created/modified columns from entities
// that don't extend GenericEntity
// ============================================================
// textblocks
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'textblocks'
AND COLUMN_NAME = 'created');
SET @sql = IF(@col > 0, 'ALTER TABLE textblocks DROP COLUMN created', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'textblocks'
AND COLUMN_NAME = 'modified');
SET @sql = IF(@col > 0, 'ALTER TABLE textblocks DROP COLUMN modified', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// search_index_entry
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'search_index_entry'
AND COLUMN_NAME = 'created');
SET @sql = IF(@col > 0, 'ALTER TABLE search_index_entry DROP COLUMN created', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'search_index_entry'
AND COLUMN_NAME = 'modified');
SET @sql = IF(@col > 0, 'ALTER TABLE search_index_entry DROP COLUMN modified', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// presence_reason
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'presence_reason'
AND COLUMN_NAME = 'created');
SET @sql = IF(@col > 0, 'ALTER TABLE presence_reason DROP COLUMN created', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'presence_reason'
AND COLUMN_NAME = 'modified');
SET @sql = IF(@col > 0, 'ALTER TABLE presence_reason DROP COLUMN modified', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// protocol_entry - only drop modified
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'protocol_entry'
AND COLUMN_NAME = 'modified');
SET @sql = IF(@col > 0, 'ALTER TABLE protocol_entry DROP COLUMN modified', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// email_history_entry - only drop modified
$this->connection->executeStatement("
SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'email_history_entry'
AND COLUMN_NAME = 'modified');
SET @sql = IF(@col > 0, 'ALTER TABLE email_history_entry DROP COLUMN modified', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt;
");
// ============================================================
// IMPORTANT: We keep created and client_id as NULLABLE
// This gives flexibility for future data imports
// If you want NOT NULL, you can set it manually later
// ============================================================
}
public function down(Schema $schema): void
{
// Rollback not needed - this is a cleanup migration
}
}