migrations/Version20260630153659.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.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20260630153659 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'Move language column from creator to user';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         if (!$this->creatorLanguageColumnExists()) {
  18.             return;
  19.         }
  20.         if (!$this->userLanguageColumnExists()) {
  21.             $this->addSql('ALTER TABLE user ADD language VARCHAR(8) DEFAULT NULL');
  22.             $this->addSql('CREATE INDEX idx_user_language ON user (language)');
  23.         }
  24.         $this->addSql(
  25.             'UPDATE user u INNER JOIN creator c ON c.id = u.id '
  26.             'SET u.language = c.language '
  27.             "WHERE c.language IS NOT NULL AND c.language NOT IN ('un','und','') "
  28.             "AND (u.language IS NULL OR u.language = '')"
  29.         );
  30.         $this->addSql('DROP INDEX idx_creator_language ON creator');
  31.         $this->addSql('ALTER TABLE creator DROP language');
  32.     }
  33.     public function down(Schema $schema): void
  34.     {
  35.         if (!$this->userLanguageColumnExists()) {
  36.             return;
  37.         }
  38.         if (!$this->creatorLanguageColumnExists()) {
  39.             $this->addSql('ALTER TABLE creator ADD language VARCHAR(8) DEFAULT NULL');
  40.             $this->addSql('CREATE INDEX idx_creator_language ON creator (language)');
  41.         }
  42.         $this->addSql(
  43.             'UPDATE creator c INNER JOIN user u ON u.id = c.id '
  44.             'SET c.language = u.language '
  45.             "WHERE u.language IS NOT NULL AND u.language NOT IN ('un','und','') "
  46.             "AND (c.language IS NULL OR c.language = '')"
  47.         );
  48.         $this->addSql('DROP INDEX idx_user_language ON user');
  49.         $this->addSql('ALTER TABLE user DROP language');
  50.     }
  51.     private function creatorLanguageColumnExists(): bool
  52.     {
  53.         return (bool) $this->connection->fetchOne(
  54.             "SELECT COUNT(*) FROM information_schema.COLUMNS "
  55.             "WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'creator' AND COLUMN_NAME = 'language'"
  56.         );
  57.     }
  58.     private function userLanguageColumnExists(): bool
  59.     {
  60.         return (bool) $this->connection->fetchOne(
  61.             "SELECT COUNT(*) FROM information_schema.COLUMNS "
  62.             "WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user' AND COLUMN_NAME = 'language'"
  63.         );
  64.     }
  65. }