【问题标题】:Change the output of the Knex rawquery更改 Knex rawquery 的输出
【发布时间】:2020-06-02 16:29:54
【问题描述】:

我不得不对 Knex 使用原始查询,因为 union 存在问题

一个查询,还不错。但现在我有其他类型的问题。

所有其他 Knex 查询(非原始查询),它们只是返回一个包含结果的数组

例如:

knex('user_subscription_plan')
        .select('*')
        .where('paused_days', '>', 91)
        .where('status', 'N_PAUSED')

会返回一个数组,空的没有结果。

但是,如果我运行原始查询,例如:

mySqlClient.raw('select * from user')

它将返回一个数组,其中包含两个数组。 第一个是正常结果,而另一个包含一些目录定义。

这干扰了我的逻辑。在每次调用 knex 结束时,我都有:

if (result.length > 0) {
   // send email
}

现在,当我运行原始查询时,结果总是大于零。 我怎样才能告诉 Knex 不要发送目录定义,换句话说,只发回结果,就像它在非原始查询中所做的那样?

【问题讨论】:

    标签: mysql node.js knex.js


    【解决方案1】:

    如果您想获得与选择结果相同的结果,请使用 select 并将您的原始查询作为不带“SELECT”关键字的参数传递。在您的示例中,而不是这样做:

    mySqlClient.raw('select * from user')

    你应该这样做:

    mySqlClient.select( mySqlClient.raw(' * from user') )

    【讨论】:

      【解决方案2】:

      你应该像@horatiu-jeflea 回答的那样去做。

      虽然我们可以向knex 添加一些方法来告诉raw 查询的结果也应该使用默认结果解析器进行解析。要使这种方式出现在 knex 中,您可以打开对其 github 问题的功能请求。

      还有https://knexjs.org/#Installation-post-process-response,您应该能够覆盖它以处理您的原始查询结果被后处理。

      【讨论】:

        【解决方案3】:

        根据https://github.com/knex/knex/issues/1802,没有办法,就这样吧

        mySqlClient.raw('select * from user')[0]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多