migrations/Version20230412095051.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 Version20230412095051 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return '';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // this up() migration is auto-generated, please modify it to your needs
  18.         $this->addSql("
  19.         CREATE TABLE IF NOT EXISTS `std_translations_content` (
  20.           `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique Identifier',
  21.           `translation_id` int unsigned NOT NULL COMMENT 'Translation ID from table std_translations',
  22.           `language_code` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ISO 639 Language code',
  23.           `content` varchar(8000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT 'ISO 639 Translation',
  24.           PRIMARY KEY (`id`),
  25.           UNIQUE KEY `translation_id_language_code` (`translation_id`,`language_code`),
  26.           KEY `FK_std_translations_content_std_languages` (`language_code`),
  27.           CONSTRAINT `FK_std_translations_content_std_languages` FOREIGN KEY (`language_code`) REFERENCES `std_languages` (`language_code`),
  28.           CONSTRAINT `FK_std_translations_content_std_translations` FOREIGN KEY (`translation_id`) REFERENCES `std_translations` (`id`)
  29.         ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  30.         ");
  31.         
  32.         $this->addSql("INSERT INTO `std_languages` (`language_code`, `name`, `is_public`, `is_active`, `is_default`, `order_value`, `locale`) 
  33.         SELECT DISTINCT language_code, language_code,0,0,0,0,language_code FROM std_translations WHERE language_code NOT IN(SELECT language_code FROM std_languages) AND RTRIM(LTRIM(COALESCE(language_code,''))) <>'';");
  34.         
  35.         $this->addSql("REPLACE INTO std_translations_content (translation_id, language_code, content)
  36.         SELECT DISTINCT t.id, s.`language_code`, s.`translation` FROM std_translations AS s
  37.         INNER JOIN (
  38.             SELECT MIN(id) AS id,label,domain FROM std_translations GROUP BY label,domain
  39.         ) AS t ON s.domain=t.domain AND s.label=t.label
  40.         ORDER BY t.id ASC");
  41.         $this->addSql("DELETE FROM std_translations WHERE id NOT IN(SELECT translation_id FROM std_translations_content)");
  42.         $this->addSql("ALTER TABLE `std_translations`
  43.         DROP COLUMN `language_code`,
  44.         DROP COLUMN `translation`;
  45.         ");
  46.         $this->addSql("ALTER TABLE `std_translations`
  47.         ADD UNIQUE INDEX `label_domain` (`label`, `domain`);");
  48.     }
  49.     public function down(Schema $schema): void
  50.     {
  51.         // this down() migration is auto-generated, please modify it to your needs
  52.         $this->addSql("ALTER TABLE `std_translations`
  53.                 DROP INDEX `label_domain`;");
  54.         
  55.         $this->addSql("ALTER TABLE `std_translations`
  56.         ADD COLUMN `language_code` VARCHAR(2) NOT NULL COLLATE 'utf8mb4_unicode_ci' AFTER `updated_by`,
  57.         ADD COLUMN `translation` VARCHAR(8000) NOT NULL COLLATE 'utf8mb4_unicode_ci' AFTER `label`;");
  58.         $this->addSql("INSERT INTO std_translations (created_by,updated_by,label,created_date,updated_date,domain,language_code,translation)
  59.         SELECT std_translations.created_by, std_translations.updated_by,std_translations.label,std_translations.created_date,std_translations.updated_date
  60.         ,std_translations.domain, std_translations_content.language_code,std_translations_content.content 
  61.         FROM std_translations 
  62.         INNER JOIN std_translations_content 
  63.         ON std_translations.id = std_translations_content.translation_id;");
  64.         
  65.         $this->addSql("DROP TABLE std_translations_content");
  66.         
  67.         $this->addSql("DELETE FROM std_translations WHERE (language_code IS NULL OR language_code = ' ') AND (translation IS NULL OR translation = ' ');");
  68.     }
  69. }