如何将 LOWER() 应用于 Objection 中的 ref

How to apply LOWER() to a ref in Objection

我在查询中使用 like where 语句,如下所示:

import { ref } from 'objection'

// [...]

query = query.where(ref('data.nested_data').castText(), 'like', `%${value}%`)

它工作正常。结果查询如下所示:

WHERE CAST("data"#>>'{nested_data}' AS text) like '%example%'

现在我想在密钥中使用 LOWER() 函数,这样我就可以找到不区分大小写的结果。所以我的查询现在看起来像这样:

import { ref, raw } from 'objection'

// [...]

query = query.where(raw(`LOWER(${ref('data.nested_data').castText()})`), 'like', `%${value.toLowerCase()}%`);

但这会导致以下 SQL 查询(抛出错误):

WHERE LOWER([object Object]) like 

-- ERROR:  syntax error at or near "["
-- LINE 6: WHERE LOWER([object Object]) like 

有什么方法可以实现我想要的吗?我不喜欢使用原始查询,因为我要转换的类型是动态的

维护 Objection 的人在 github 帮助我解决了这个问题。

正确的语法是:

const key = ref('data.nested_data').castText();
query = query.where(raw('LOWER(??)', [key]), 'like', `%${value.toLowerCase()}%`);