migrations/Places/Version20200229091201_Place.php line 1
<?php
declare(strict_types=1);
namespace DoctrineMigrations\Places;
use App\Doctrine\Type\Places\PlaceStatus;
use App\Doctrine\Type\Places\PlaceType;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20200229091201_Place extends AbstractMigration
{
public function getDescription(): string
{
return 'Add place table';
}
public function up(Schema $schema): void
{
$this->addSql(PlaceType::getRegistrationSQL());
$this->addSql(PlaceStatus::getRegistrationSQL());
$placeTypeType = PlaceType::getName();
$placeStatusType = PlaceStatus::getName();
$this->addSql("CREATE TABLE place (
id SERIAL PRIMARY KEY,
name CHARACTER VARYING,
type {$placeTypeType} NOT NULL,
status {$placeStatusType} NOT NULL,
code CHARACTER VARYING,
street CHARACTER VARYING,
city CHARACTER VARYING,
country_code CHARACTER VARYING NOT NULL,
country CHARACTER VARYING,
owner_id INTEGER,
is_main BOOL DEFAULT false,
is_hub BOOL,
is_managed BOOL,
fulltext TSVECTOR GENERATED ALWAYS AS (
SETWEIGHT(TO_TSVECTOR('english', COALESCE(name, '')), 'A') ||
SETWEIGHT(TO_TSVECTOR('english', COALESCE(code, '')), 'A') ||
SETWEIGHT(TO_TSVECTOR('english', COALESCE(street, '')), 'A') ||
SETWEIGHT(TO_TSVECTOR('english', COALESCE(city, '')), 'B') ||
SETWEIGHT(TO_TSVECTOR('english', COALESCE(country, '')), 'C') ||
SETWEIGHT(TO_TSVECTOR('english', COALESCE(country_code, '')), 'D')
) STORED,
created_by INTEGER REFERENCES public.user (id),
updated_by INTEGER REFERENCES public.user (id),
created_at TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(0) WITH TIME ZONE,
deleted_at TIMESTAMP(0) WITH TIME ZONE
)");
//$this->addSql("CREATE INDEX place_text_idx ON place (name, code, street, city, country, country_code, type);");
$this->addSql("CREATE INDEX place_owner_id_idx ON place (owner_id)");
$this->addSql("CREATE INDEX place_fulltext_idx ON place USING GIN (fulltext);");
$this->addSql("CREATE INDEX place_created_by_idx ON place (created_by)");
$this->addSql("CREATE INDEX place_updated_by_idx ON place (updated_by)");
}
public function down(Schema $schema): void
{
$this->addSql("DROP TABLE IF EXISTS place");
$this->addSql(PlaceStatus::getDeletionSQL());
$this->addSql(PlaceType::getDeletionSQL());
}
}