Tai*_*ran 2 postgresql typeorm
在typeorm中,如何在此原始查询中创建postgres枚举类型Gender
CREATE TYPE public.Gender AS ENUM (
'male', 'female'
);
ALTER TABLE public.person ALTER COLUMN gender TYPE public.gender USING gender::gender;
Run Code Online (Sandbox Code Playgroud)
并在Entity类中使用它?
我试过了
@Entity()
export class Person {
@Column('enum')
gender: 'male' | 'female'
}
Run Code Online (Sandbox Code Playgroud)
但显然这不是正确的方法,因为我收到错误消息"类型枚举不存在".
我也不想使用typescript enum,因为它会在数据库中给我一堆0和1.
noa*_*ner 57
根据文档
postgres 和 mysql 支持 enum 列类型。有多种可能的列定义:
使用打字稿枚举:
export enum UserRole {
ADMIN = "admin",
EDITOR = "editor",
GHOST = "ghost"
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: "enum",
enum: UserRole,
default: UserRole.GHOST
})
role: UserRole;
}
Run Code Online (Sandbox Code Playgroud)
使用带有枚举值的数组:
export type UserRoleType = "admin" | "editor" | "ghost",
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: "enum",
enum: ["admin", "editor", "ghost"],
default: "ghost"
})
role: UserRoleType;
}
Run Code Online (Sandbox Code Playgroud)
Fel*_*ino 10
编辑:这个答案仍然有效,但有点过时,因为0.1.0
TypeORM的alpha版本支持PostgreSQL和MySQL的枚举.
PostgreSQL
有一个内置的枚举类型,但遗憾的是TypeORM
目前只支持MySQL.
但是,通过使用@Column
类型as int
和使用字段类型的枚举,可以使用int类型枚举实现类似的结果.
enum Gender {
Male,
Female,
Other
}
@Entity()
export class Person {
@Column('int')
gender: Gender
}
Run Code Online (Sandbox Code Playgroud)
(这种方法允许您使用@IsEnum
类验证器中的装饰器来验证输入(如果需要))
您还可以使用字符串枚举(在TypeScript 2.4上可用,从旧版本的JSON字符串中检查Typescript`enum`),如果是这种情况,只需将数据类型更改为string
.
enum Gender {
Male = 'male',
Female = 'female',
Other = 'other'
}
@Entity()
export class Person {
@Column('text')
gender: Gender
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6952 次 |
最近记录: |