将 PostgresQL 查询转换为 Knex.js

Converting a PostgresSQL query into Knex.js

我必须使用 knex 在 whereIn 中使用 LOWER 函数。 我想更改下面的代码行

whereIn("name", members);

如果我这样做 whereIn('LOWER("name")', members);,则出现错误 Column LOWER("name") is not present. 我尝试使用 knex.raw 但还是没有得到正确的语法。

const roleMembers = await t("roles")
          .select({ role_id: "id" }, "name")
          .whereIn(t.raw("LOWER('name')"), members);

错误:

index.d.ts(1184, 5)

当我尝试添加 await 时,语法错误消失了,但是当我执行此代码时,出现以下错误

错误:LOWER(name) - syntax error at or near "LOWER" 我指的是 http://knexjs.org/#Builder-whereIn

我们有 whereRawwhereIn 有类似的东西吗?需要一些帮助来解决这个问题。

注:我用的都是LOWER,更低,更低

knex.raw()可用于列组件

knex('members').whereIn(knex.raw('Lower("name")'), members)
select * from `members` where Lower("name") in ('Tom', 'Dick', 'harry')

最终解决方案如下。

const roleMembers = await t("roles")
          .select({ role_id: "id" }, "name")
          .whereIn(t.raw('LOWER("name")') as any, members);

我对原代码的改动是

  1. 引号:交换了 " 和 '
  2. 降低,降低和降低工作
  3. 打字稿错误:添加为任意

感谢 Matt 和 Mikael 的指导。