vendor/pimcore/pimcore/bundles/CoreBundle/Migrations/Version20220120121803.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Commercial License (PCL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  14.  */
  15. namespace Pimcore\Bundle\CoreBundle\Migrations;
  16. use Doctrine\DBAL\Schema\Schema;
  17. use Doctrine\Migrations\AbstractMigration;
  18. final class Version20220120121803 extends AbstractMigration
  19. {
  20.     public function getDescription(): string
  21.     {
  22.         return 'Use foreign key for delete cascade on documents references';
  23.     }
  24.     public function up(Schema $schema): void
  25.     {
  26.         //disable foreign key checks
  27.         $this->addSql('SET foreign_key_checks = 0');
  28.         foreach (['documents_hardlink''documents_link''documents_page''documents_snippet''documents_printpage''documents_email''documents_newsletter''documents_translations'] as $table) {
  29.             if (!$schema->getTable($table)->hasForeignKey('fk_'.$table.'_documents')) {
  30.                 $this->addSql(
  31.                     'ALTER TABLE `'.$table.'`
  32.                     ADD CONSTRAINT `fk_'.$table.'_documents`
  33.                     FOREIGN KEY (`id`)
  34.                     REFERENCES `documents` (`id`)
  35.                     ON UPDATE NO ACTION
  36.                     ON DELETE CASCADE;'
  37.                 );
  38.             }
  39.         }
  40.         if (!$schema->getTable($table)->hasForeignKey('fk_documents_editables_documents')) {
  41.             $this->addSql(
  42.                 'ALTER TABLE `documents_editables`
  43.                 ADD CONSTRAINT `fk_documents_editables_documents`
  44.                 FOREIGN KEY (`documentId`)
  45.                 REFERENCES `documents` (`id`)
  46.                 ON UPDATE NO ACTION
  47.                 ON DELETE CASCADE;'
  48.             );
  49.         }
  50.         $this->addSql('ALTER TABLE `email_log` CHANGE `documentId` `documentId` int(11) unsigned NULL;');
  51.         if (!$schema->getTable('email_log')->hasForeignKey('fk_email_log_documents')) {
  52.             $this->addSql(
  53.                 'ALTER TABLE `email_log`
  54.                 ADD CONSTRAINT `fk_email_log_documents`
  55.                 FOREIGN KEY (`documentId`)
  56.                 REFERENCES `documents` (`id`)
  57.                 ON UPDATE NO ACTION
  58.                 ON DELETE CASCADE;'
  59.             );
  60.         }
  61.         if (!$schema->getTable('sites')->hasForeignKey('fk_sites_documents')) {
  62.             $this->addSql(
  63.                 'ALTER TABLE `sites`
  64.                 ADD CONSTRAINT `fk_sites_documents`
  65.                 FOREIGN KEY (`rootId`)
  66.                 REFERENCES `documents` (`id`)
  67.                 ON UPDATE NO ACTION
  68.                 ON DELETE CASCADE;'
  69.             );
  70.         }
  71.         //enable foreign key checks
  72.         $this->addSql('SET foreign_key_checks = 1');
  73.     }
  74.     public function down(Schema $schema): void
  75.     {
  76.         foreach (['documents_hardlink''documents_link''documents_page''documents_snippet''documents_printpage''documents_email''email_log''documents_newsletter''documents_editables''documents_translations'] as $table) {
  77.             if ($schema->getTable($table)->hasForeignKey('fk_'.$table.'_documents')) {
  78.                 $this->addSql('ALTER TABLE `'.$table.'` DROP FOREIGN KEY `fk_'.$table.'_documents`;');
  79.             }
  80.         }
  81.         if ($schema->getTable('sites')->hasForeignKey('fk_sites_documents')) {
  82.             $this->addSql('ALTER TABLE `sites` DROP FOREIGN KEY `fk_sites_documents`;');
  83.         }
  84.     }
  85. }