migrations/Places/Version20200229091201_Place.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Places;
  4. use App\Doctrine\Type\Places\PlaceStatus;
  5. use App\Doctrine\Type\Places\PlaceType;
  6. use Doctrine\DBAL\Schema\Schema;
  7. use Doctrine\Migrations\AbstractMigration;
  8. /**
  9.  * Auto-generated Migration: Please modify to your needs!
  10.  */
  11. final class Version20200229091201_Place extends AbstractMigration
  12. {
  13.     public function getDescription(): string
  14.     {
  15.         return 'Add place table';
  16.     }
  17.     public function up(Schema $schema): void
  18.     {
  19.         $this->addSql(PlaceType::getRegistrationSQL());
  20.         $this->addSql(PlaceStatus::getRegistrationSQL());
  21.         $placeTypeType PlaceType::getName();
  22.         $placeStatusType PlaceStatus::getName();
  23.         $this->addSql("CREATE TABLE place (
  24.             id                              SERIAL PRIMARY KEY,
  25.             name                            CHARACTER VARYING,
  26.             type                            {$placeTypeType}            NOT NULL,
  27.             status                          {$placeStatusType}          NOT NULL,
  28.             code                            CHARACTER VARYING,
  29.             street                          CHARACTER VARYING,
  30.             city                            CHARACTER VARYING,
  31.             country_code                    CHARACTER VARYING           NOT NULL,
  32.             country                         CHARACTER VARYING,
  33.             owner_id                        INTEGER,
  34.             is_main                         BOOL                                 DEFAULT false,
  35.             is_hub                          BOOL,
  36.             is_managed                      BOOL,
  37.             fulltext                        TSVECTOR GENERATED ALWAYS AS (
  38.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(name, '')), 'A') ||
  39.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(code, '')), 'A') ||
  40.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(street, '')), 'A') ||
  41.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(city, '')), 'B') ||
  42.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(country, '')), 'C') ||
  43.                 SETWEIGHT(TO_TSVECTOR('english', COALESCE(country_code, '')), 'D')
  44.             ) STORED,
  45.             created_by                      INTEGER                              REFERENCES public.user (id),
  46.             updated_by                      INTEGER                              REFERENCES public.user (id),
  47.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  48.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  49.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE
  50.         )");
  51.         //$this->addSql("CREATE INDEX place_text_idx ON place (name, code, street, city, country, country_code, type);");
  52.         $this->addSql("CREATE INDEX place_owner_id_idx ON place (owner_id)");
  53.         $this->addSql("CREATE INDEX place_fulltext_idx ON place USING GIN (fulltext);");
  54.         $this->addSql("CREATE INDEX place_created_by_idx ON place (created_by)");
  55.         $this->addSql("CREATE INDEX place_updated_by_idx ON place (updated_by)");
  56.     }
  57.     public function down(Schema $schema): void
  58.     {
  59.         $this->addSql("DROP TABLE IF EXISTS place");
  60.         $this->addSql(PlaceStatus::getDeletionSQL());
  61.         $this->addSql(PlaceType::getDeletionSQL());
  62.     }
  63. }