migrations/Version20251022103000.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Final cleanup: Add missing FKs and remove unnecessary columns
  8.  */
  9. final class Version20251022103000 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'Final cleanup - add missing FKs, remove unnecessary created/modified columns';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // ============================================================
  18.         // Add missing Foreign Keys
  19.         // ============================================================
  20.         
  21.         // ckimage
  22.         $this->connection->executeStatement("
  23.             SET @fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
  24.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ckimage' 
  25.                 AND COLUMN_NAME = 'client_id' AND REFERENCED_TABLE_NAME IS NOT NULL);
  26.             SET @sql = IF(@fk = 0, 'ALTER TABLE ckimage ADD CONSTRAINT FK_461E85DD19EB6921 FOREIGN KEY (client_id) REFERENCES client (id)', 'SELECT 1');
  27.             PREPARE stmt FROM @sql; EXECUTE stmt;
  28.         ");
  29.         
  30.         // cart_item
  31.         $this->connection->executeStatement("
  32.             SET @fk = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
  33.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'cart_item' 
  34.                 AND COLUMN_NAME = 'client_id' AND REFERENCED_TABLE_NAME IS NOT NULL);
  35.             SET @sql = IF(@fk = 0, 'ALTER TABLE cart_item ADD CONSTRAINT FK_F0FE252719EB6921 FOREIGN KEY (client_id) REFERENCES client (id)', 'SELECT 1');
  36.             PREPARE stmt FROM @sql; EXECUTE stmt;
  37.         ");
  38.         // ============================================================
  39.         // Remove unnecessary created/modified columns from entities
  40.         // that don't extend GenericEntity
  41.         // ============================================================
  42.         
  43.         // textblocks
  44.         $this->connection->executeStatement("
  45.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  46.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'textblocks' 
  47.                 AND COLUMN_NAME = 'created');
  48.             SET @sql = IF(@col > 0, 'ALTER TABLE textblocks DROP COLUMN created', 'SELECT 1');
  49.             PREPARE stmt FROM @sql; EXECUTE stmt;
  50.         ");
  51.         
  52.         $this->connection->executeStatement("
  53.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  54.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'textblocks' 
  55.                 AND COLUMN_NAME = 'modified');
  56.             SET @sql = IF(@col > 0, 'ALTER TABLE textblocks DROP COLUMN modified', 'SELECT 1');
  57.             PREPARE stmt FROM @sql; EXECUTE stmt;
  58.         ");
  59.         
  60.         // search_index_entry
  61.         $this->connection->executeStatement("
  62.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  63.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'search_index_entry' 
  64.                 AND COLUMN_NAME = 'created');
  65.             SET @sql = IF(@col > 0, 'ALTER TABLE search_index_entry DROP COLUMN created', 'SELECT 1');
  66.             PREPARE stmt FROM @sql; EXECUTE stmt;
  67.         ");
  68.         
  69.         $this->connection->executeStatement("
  70.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  71.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'search_index_entry' 
  72.                 AND COLUMN_NAME = 'modified');
  73.             SET @sql = IF(@col > 0, 'ALTER TABLE search_index_entry DROP COLUMN modified', 'SELECT 1');
  74.             PREPARE stmt FROM @sql; EXECUTE stmt;
  75.         ");
  76.         
  77.         // presence_reason
  78.         $this->connection->executeStatement("
  79.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  80.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'presence_reason' 
  81.                 AND COLUMN_NAME = 'created');
  82.             SET @sql = IF(@col > 0, 'ALTER TABLE presence_reason DROP COLUMN created', 'SELECT 1');
  83.             PREPARE stmt FROM @sql; EXECUTE stmt;
  84.         ");
  85.         
  86.         $this->connection->executeStatement("
  87.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  88.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'presence_reason' 
  89.                 AND COLUMN_NAME = 'modified');
  90.             SET @sql = IF(@col > 0, 'ALTER TABLE presence_reason DROP COLUMN modified', 'SELECT 1');
  91.             PREPARE stmt FROM @sql; EXECUTE stmt;
  92.         ");
  93.         
  94.         // protocol_entry - only drop modified
  95.         $this->connection->executeStatement("
  96.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  97.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'protocol_entry' 
  98.                 AND COLUMN_NAME = 'modified');
  99.             SET @sql = IF(@col > 0, 'ALTER TABLE protocol_entry DROP COLUMN modified', 'SELECT 1');
  100.             PREPARE stmt FROM @sql; EXECUTE stmt;
  101.         ");
  102.         
  103.         // email_history_entry - only drop modified
  104.         $this->connection->executeStatement("
  105.             SET @col = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
  106.                 WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'email_history_entry' 
  107.                 AND COLUMN_NAME = 'modified');
  108.             SET @sql = IF(@col > 0, 'ALTER TABLE email_history_entry DROP COLUMN modified', 'SELECT 1');
  109.             PREPARE stmt FROM @sql; EXECUTE stmt;
  110.         ");
  111.         // ============================================================
  112.         // IMPORTANT: We keep created and client_id as NULLABLE
  113.         // This gives flexibility for future data imports
  114.         // If you want NOT NULL, you can set it manually later
  115.         // ============================================================
  116.     }
  117.     public function down(Schema $schema): void
  118.     {
  119.         // Rollback not needed - this is a cleanup migration
  120.     }
  121. }