【发布时间】:2022-01-18 07:25:46
【问题描述】:
简单地说,是否可以在我引用存储在行中的值的位置创建过滤查询?
例如:
orm.em.findOne(Job, {
status: 'active',
startDate: {
$gt: '$anotherDateField'
}
}
我的目标是有一个用户输入定义的过滤器(状态),但也只带回开始日期大于另一列值的某些行。
【问题讨论】:
标签: mikro-orm
简单地说,是否可以在我引用存储在行中的值的位置创建过滤查询?
例如:
orm.em.findOne(Job, {
status: 'active',
startDate: {
$gt: '$anotherDateField'
}
}
我的目标是有一个用户输入定义的过滤器(状态),但也只带回开始日期大于另一列值的某些行。
【问题讨论】:
标签: mikro-orm
您可以使用自定义 SQL 片段
orm.em.findOne(Job, {
status: 'active',
// expr helper allows to escape strict typing of the method, so we can use `em.raw()`
[expr('startDate')]: {
$gt: orm.em.raw('another_date_field') // this will have to be column name, not property name
}
}
请注意,您的em 需要输入到从驱动程序包导出的那个才能访问em.raw() 方法(如果您使用orm 实例,您需要将其输入到MikroORM<YourDriver> 所以@ 987654327@可以正确输入)。
https://mikro-orm.io/docs/entity-manager/#using-custom-sql-fragments
【讨论】:
em,因为它处理复杂的 json 字段查询。如果不参考em,这可能吗?如果没有,我将其作为参数传入。
$gt: '(another_date_field)'。不知道行不行,没试过
raw。我正在注入:orm: MikroORM<PostgreSqlDriver>,但orm.em 上不存在raw(mikro-orm 4.5.9,mikro-orm psql 4.5.9)。
getKnex 解决了这个问题。这现在似乎正在生成正确的 SQL,即使使用 JSON 字段也是如此。非常感谢。
em.raw() 只是 v5,但它只是一个快捷方式