<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20230206161754 extends AbstractMigration
{
public function getDescription(): string
{
return 'Update Sector model by removing zip code field and adding new related tables';
}
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE sector_city (sector_id INT NOT NULL, city_id INT NOT NULL,
PRIMARY KEY(sector_id, city_id))');
$this->addSql('CREATE INDEX IDX_FB357DD5DE95C867 ON sector_city (sector_id)');
$this->addSql('CREATE INDEX IDX_FB357DD58BAC62AF ON sector_city (city_id)');
$this->addSql('CREATE TABLE sector_neighborhood (sector_id INT NOT NULL, neighborhood_id INT NOT NULL,
PRIMARY KEY(sector_id, neighborhood_id))');
$this->addSql('CREATE INDEX IDX_9FE08800DE95C867 ON sector_neighborhood (sector_id)');
$this->addSql('CREATE INDEX IDX_9FE08800803BB24B ON sector_neighborhood (neighborhood_id)');
$this->addSql('ALTER TABLE sector_city ADD CONSTRAINT FK_FB357DD5DE95C867 FOREIGN KEY (sector_id)
REFERENCES sector (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('ALTER TABLE sector_city ADD CONSTRAINT FK_FB357DD58BAC62AF FOREIGN KEY (city_id)
REFERENCES city (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('ALTER TABLE sector_neighborhood ADD CONSTRAINT FK_9FE08800DE95C867 FOREIGN KEY (sector_id)
REFERENCES sector (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('ALTER TABLE sector_neighborhood ADD CONSTRAINT FK_9FE08800803BB24B FOREIGN KEY
(neighborhood_id) REFERENCES neighborhood (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('ALTER TABLE sector DROP CONSTRAINT fk_4ba3d9e88bac62af');
$this->addSql('ALTER TABLE sector DROP CONSTRAINT fk_4ba3d9e8803bb24b');
$this->addSql('DROP INDEX idx_4ba3d9e8803bb24b');
$this->addSql('DROP INDEX idx_4ba3d9e88bac62af');
// Migrate data from the sector table to other tables.
$this->addSql("INSERT INTO sector_city (sector_id, city_id) SELECT id, city_id FROM sector");
$this->addSql("INSERT INTO sector_neighborhood (sector_id, neighborhood_id) SELECT id, neighborhood_id FROM sector WHERE neighborhood_id IS NOT NULL");
// Remove some sector fields
$this->addSql('ALTER TABLE sector DROP city_id');
$this->addSql('ALTER TABLE sector DROP neighborhood_id');
$this->addSql('ALTER TABLE sector DROP zip_code');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE sector_city');
$this->addSql('DROP TABLE sector_neighborhood');
$this->addSql('ALTER TABLE sector ADD city_id INT NOT NULL');
$this->addSql('ALTER TABLE sector ADD neighborhood_id INT DEFAULT NULL');
$this->addSql('ALTER TABLE sector ADD zip_code VARCHAR(255) DEFAULT NULL');
$this->addSql('ALTER TABLE sector ADD CONSTRAINT fk_4ba3d9e88bac62af FOREIGN KEY (city_id)
REFERENCES city (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('ALTER TABLE sector ADD CONSTRAINT fk_4ba3d9e8803bb24b FOREIGN KEY (neighborhood_id)
REFERENCES neighborhood (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('CREATE INDEX idx_4ba3d9e8803bb24b ON sector (neighborhood_id)');
$this->addSql('CREATE INDEX idx_4ba3d9e88bac62af ON sector (city_id)');
}
}