在整数列上使用 Like 运算符进行过滤

Filtering with Like operator on integer column

我正在使用 mikro-orm 进行与数据库相关的操作。我的数据库实体有一个数字字段:

@Property({ defaultRaw: 'srNumber', type: 'number' })
 srNumber!: number;

对应的数据库列(Postgresql)是:

srNumber(int8)

mikro-orm EntityRepository's findAndCount(where, option)where参数的查询输入是:

repository.findAndCount({"srNumber":{"$like":"%1000%"}}, options)

翻译成:

select * from table1 where srNumber like '%1000%'

这里的问题是因为 srNumber 列不是字符串,类型不匹配导致查询失败。像 CAST(srNumber AS TEXT) like '%1000%' 那样转换它应该在 db.

中工作

有什么方法可以在这里指定字段转换吗?

您可以在查询中使用自定义 SQL 片段。要避开严格类型化的 FilterQuery,您可以使用 expr 这只是一个身份函数(returns 它的参数),因此仅对 TS 检查有效。

像这样的东西应该可以工作:

import { expr } from '@mikro-orm/core';

const res = await repo.findAndCount({
  [expr('cast(srNumber as text)')]: { $like: '%1000%' },
}, options);

https://mikro-orm.io/docs/entity-manager/#using-custom-sql-fragments