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. }