简体   繁体   English

将 PostgresSQL 查询转换为 Knex.js

[英]Converting a PostgresSQL query into Knex.js

I have to use the LOWER function in whereIn using knex.我必须使用 knex 在whereIn使用LOWER函数。 I want to change the below line of code我想更改下面的代码行

whereIn("name", members);

If I do whereIn('LOWER("name")', members);如果我这样做whereIn('LOWER("name")', members); , getting error as Column LOWER("name") is not present. ,由于Column LOWER("name") is not present. I tried to use knex.raw but again not getting the correct syntax.我尝试使用 knex.raw 但再次没有得到正确的语法。

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

Error:错误: 在此处输入图片说明

index.d.ts(1184, 5) index.d.ts(1184, 5)

When I try to add await, syntax error goes away but when I execute this code I get the below error当我尝试添加 await 时,语法错误消失了,但是当我执行此代码时,出现以下错误

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

We have whereRaw , Do we have a similar thing for whereIn ?我们有whereRaw ,我们有类似的东西whereIn吗? Need some help to fix this issue.需要一些帮助来解决这个问题。

Note: I used all LOWER, lower, Lower.注意:我使用了所有LOWER,lower,Lower。

knex.raw()可用于列组件

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

The final solution is below.最终解决方案如下。

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

My changes to the original code are我对原始代码的更改是

  1. Quotes: swapped " and '行情:交换了“和”
  2. lower, Lower and LOWER worked较低,较低和较低的工作
  3. Typescript error: added as any打字稿错误:添加为任何

Thanks Matt and Mikael for guidance.感谢 Matt 和 Mikael 的指导。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM