abortIf( 'postgresql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'postgresql\'.' ); $this->addSql('ALTER TABLE Report DROP CONSTRAINT FK_report_scope'); $this->addSql('DROP INDEX IDX_report_scope'); $this->addSql('ALTER TABLE Report ADD scope VARCHAR(255) DEFAULT NULL'); $this->addSql('ALTER TABLE Report DROP scope_id'); } public function setContainer(ContainerInterface $container = null) { if (null === $container) { throw new \RuntimeException('Container is not provided. This migration need container to set a default center'); } $this->container = $container; } public function up(Schema $schema): void { $this->abortIf( 'postgresql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'postgresql\'.' ); $this->addSql('ALTER TABLE report ADD scope_id INT DEFAULT NULL'); /* * Before the upgrade to symfony version 4, this code worked. * * But it doesn't work any more after the migration and currently this * code should note be necessary. * * This code is kept for reference, and may be re-activated if needed, but * the probability that this will happens is near 0 * //add a default scope $scopes = $this->container->get('doctrine.orm.default_entity_manager') ->getRepository(\Chill\MainBundle\Entity\Scope::class) ->findAll(); if (count($scopes) > 0) { $defaultScopeId = $scopes[0]->getId(); } else { //check if there are data in report table $nbReports = $this->container->get('doctrine.orm.default_entity_manager') ->createQuery('SELECT count(r.id) FROM ChillReportBundle:Report r') ->getSingleScalarResult(); if ($nbReports > 0) { //create a default scope $scope = new Scope(); //create name according to installed languages $locales = $this->container ->getParameter('chill_main.available_languages'); $names = array(); foreach($locales as $locale) { $names[$locale] = 'default'; } $scope->setName($names); //persist $this->container->get('doctrine.orm.default_entity_manager') ->persist($scope); $this->container->get('doctrine.orm.default_entity_manager') ->flush(); //default scope is the newly-created one $defaultScopeId = $scope->getId(); } }*/ $this->addSql('ALTER TABLE report DROP scope'); // before this migration, scope was never used $this->addSql('ALTER TABLE report ADD CONSTRAINT FK_report_scope ' .'FOREIGN KEY (scope_id) ' .'REFERENCES scopes (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); if (isset($defaultScopeId)) { $this->addSql('UPDATE report SET scope_id = :id', [ 'id' => $defaultScopeId, ]); } $this->addSql('ALTER TABLE report ALTER COLUMN scope_id SET NOT NULL'); $this->addSql('CREATE INDEX IDX_report_scope ON report (scope_id)'); } }