2017-07-07 44 views
0

在typeorm,我怎麼可以創建一個Postgres枚舉類型性別在這個原始查詢Postgres的枚舉在typeorm

CREATE TYPE public.Gender AS ENUM (
    'male', 'female' 
); 
ALTER TABLE public.person ALTER COLUMN gender TYPE public.gender USING gender::gender; 

,並在實體類使用它呢?

我已經試過

@Entity() 
export class Person { 
    @Column('enum') 
    gender: 'male' | 'female' 
} 

,但顯然這是不正確的做法,因爲我得到了錯誤消息「型枚舉不存在」。

我不想使用typescript枚舉,因爲它會給我一堆數據庫中的0和1。

回答

3

編輯:這個答案仍然是有效的,但有點過時,因爲TypeORM支持枚舉0.1.0阿爾法版本都PostgreSQL和MySQL。


PostgreSQL有一個內置的枚舉類型,但不幸的是TypeORM目前only supports it for MySQL

但是,通過使用@Column類型作爲int並使用您的字段類型的枚舉,可以使用int型枚舉實現類似的結果。

enum Gender { 
    Male, 
    Female, 
    Other 
} 

@Entity() 
export class Person { 
    @Column('int') 
    gender: Gender 
} 

(此方法可讓您使用@IsEnum decorator from class-validator如果需要驗證輸入)

你也可以使用字符串枚舉(上打字稿2.4可用,檢查Typescript `enum` from JSON string舊版本),如果是這樣的話改爲將數據類型更改爲string

enum Gender { 
    Male = 'male', 
    Female = 'female', 
    Other = 'other' 
} 

@Entity() 
export class Person { 
    @Column('string') 
    gender: Gender 
}