es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeORM no analiza Enum como el tipo de PostgreSQL.

Entidad:

 @Entity()
export class MyEntity {
  @Column({
    type: 'enum',
    enum: MyEnum,
    default: MyEnum.DEFAULT,
  })
  type: MyEnum;
}
 

Enum:

 export enum MyEnum {
  DEFAULT = 1,
  NOT_DEFAULT = 2
}
 

Migración creada por TypeORM:

 await queryRunner.query(
  `CREATE TYPE "my_enum_type_enum" AS ENUM('1', '2&##39;)`,
);
await queryRunner.query(
  `ALTER TABLE "my_table" ADD "type" "my_enum_type_enum" NOT NULL DEFAULT '1'`,
);  

Crear la entidad en el código funciona bien, como se muestra en el siguiente ejemplo:

 my_entity.type = MyEnum.DEFAULT; // "1" y "DEFAULT" no funcionan, pero 1 (int) funciona
 

Pero cuando intento guardarla a través del Repositorio , tengo un error:

 valor de entrada no válido para el enum my_enaum_type_enum: "DEFAULT"
 

¿Qué me falta aquí?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que el valor pasado al enum en la Entidad no coincide con la representación de cadena del enum definido en el script de migración.

    En la Entidad, el valor del enum está establecido en MyEnum.DEFAULT, que es equivalente a 1 según se indica en la definición del enum. Sin embargo, en el script de migración, los valores del enum están definidos como ‘1’ y ‘2’, que son representaciones de cadena de los valores enteros.

    Para resolver este problema, los valores del enum en el script de migración deberían ser definidos como enteros en vez de cadenas:

    await queryRunner.query(
      `CREATE TYPE "my_enum_type_enum" AS ENUM(1, 2)`,
    );
    

    Una vez hecha esta modificación, la representación de cadena del valor del enum establecido en la Entidad coincidirá con los valores definidos en el script de migración, y el Repositorio podrá guardar la entidad sin errores.

Comments are closed.