2

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

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

对应的 db 列(Postgresql)是:

srNumber(int8)

whereparam in的查询输入为mikro-orm EntityRepository's findAndCount(where, option)

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

它转化为:

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

这里的问题是由于srNumber列不是字符串,因此存在类型不匹配并且查询失败。铸造它CAST(srNumber AS TEXT) like '%1000%'应该在数据库中工作。

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

4

1 回答 1

1

您可以在查询中使用自定义 SQL 片段。要绕过严格类型FilterQuery,您可以使用exprwhich 只是一个身份函数(返回其参数),因此仅对 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

于 2021-06-07T16:29:14.777 回答