如何将 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()}%`);
我在查询中使用 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()}%`);