migrations/Version20251027180533.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. final class Version20251027180533 extends AbstractMigration
  7. {
  8.     public function getDescription(): string
  9.     {
  10.         return 'Crea tabla manual con secuencia manual_id_seq, default de id y índice único (product_id, name).';
  11.     }
  12.     public function up(Schema $schema): void
  13.     {
  14.         // Si existía una secuencia vieja, elimínala sin fallar si no existe
  15.         $this->addSql(<<<'SQL'
  16.             DROP SEQUENCE IF EXISTS public.order_manual_id_seq CASCADE
  17.         SQL);
  18.         // Crea la secuencia para manual.id (si no existe)
  19.         $this->addSql(<<<'SQL'
  20.             CREATE SEQUENCE IF NOT EXISTS public.manual_id_seq
  21.                 INCREMENT BY 1 MINVALUE 1 START 1
  22.         SQL);
  23.         // Crea la tabla manual
  24.         $this->addSql(<<<'SQL'
  25.             CREATE TABLE IF NOT EXISTS public.manual (
  26.                 id INT NOT NULL,
  27.                 product_id INT NOT NULL,
  28.                 name VARCHAR(30) NOT NULL,
  29.                 version VARCHAR(15) DEFAULT '0.0.0' NOT NULL,
  30.                 created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
  31.                 updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
  32.                 PRIMARY KEY(id)
  33.             )
  34.         SQL);
  35.         // Vincula la secuencia a la columna y establece el DEFAULT
  36.         $this->addSql(<<<'SQL'
  37.             ALTER SEQUENCE public.manual_id_seq OWNED BY public.manual.id
  38.         SQL);
  39.         $this->addSql(<<<'SQL'
  40.             ALTER TABLE public.manual
  41.                 ALTER COLUMN id SET DEFAULT nextval('public.manual_id_seq')
  42.         SQL);
  43.         // Índice único por (product_id, name)
  44.         $this->addSql(<<<'SQL'
  45.             CREATE UNIQUE INDEX IF NOT EXISTS unique_manual_per_product
  46.                 ON public.manual (product_id, name)
  47.         SQL);
  48.     }
  49.     public function down(Schema $schema): void
  50.     {
  51.         // Revierte índice único
  52.         $this->addSql(<<<'SQL'
  53.             DROP INDEX IF EXISTS public.unique_manual_per_product
  54.         SQL);
  55.         // Revierte default y borra tabla
  56.         $this->addSql(<<<'SQL'
  57.             ALTER TABLE IF EXISTS public.manual
  58.                 ALTER COLUMN id DROP DEFAULT
  59.         SQL);
  60.         $this->addSql(<<<'SQL'
  61.             DROP TABLE IF EXISTS public.manual
  62.         SQL);
  63.         // Borra la secuencia creada por esta migración
  64.         $this->addSql(<<<'SQL'
  65.             DROP SEQUENCE IF EXISTS public.manual_id_seq CASCADE
  66.         SQL);
  67.         //-- Opcional: si necesitas dejar la secuencia antigua como estaba:
  68.         $this->addSql(<<<'SQL'
  69.             CREATE SEQUENCE IF NOT EXISTS public.order_manual_id_seq
  70.                 INCREMENT BY 1 MINVALUE 1 START 1
  71.         SQL);
  72.     }
  73. }