更改Knex rawquery的输出

时间:2020-02-18 15:38:05

标签: mysql node.js knex.js

由于union有问题,我被迫在Knex上使用原始查询。

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

所有其他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不发送目录定义,换句话说,就是将结果发送回去,就像在非原始查询上一样?

3 个答案:

答案 0 :(得分:1)

根据https://github.com/knex/knex/issues/1802,没有办法解决,只需做

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

答案 1 :(得分:0)

您应该像@ horatiu-jeflea回答那样做。

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

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

答案 2 :(得分:0)

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

mySqlClient.raw('select * from user')

您应该这样做:

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

相关问题