如何在TypeORM中按PostgreSQL枚举字段的文本值排序?
在TypeORM中实现枚举字段按文本值排序
要在TypeORM中实现和PostgreSQL原生order by "Country"."continent"::TEXT DESC相同的枚举文本排序效果,不能直接用对象形式指定字段排序——默认会按枚举的底层存储值(通常是数字或枚举常量的内部标识)排序,而非文本值。需要借助TypeORM的Raw函数构造原生SQL排序片段:
- 先导入
Raw工具函数:
import { Raw } from "typeorm";
- 修改你的
orderBy配置,用Raw生成带类型转换的排序表达式:
orderBy = { ...orderBy, continent: Raw(alias => `${alias}::TEXT ${value.sort}`) };
说明:
Raw的回调参数alias会被TypeORM自动替换为当前字段的完整别名(比如"Country"."continent"),不用手动写死表名/字段名。${alias}::TEXT对应PostgreSQL的枚举转文本类型转换,${value.sort}传入你的排序方向(ASC或DESC),最终生成的SQL和你手动编写的完全一致。- 确保
value.sort是合法的排序方向字符串,避免非法输入引发SQL语法错误。
内容的提问来源于stack exchange,提问作者killjoy
相关产品推荐
相关产品推荐

