【问题标题】:Dynamyc queries in knexknex 中的动态查询
【发布时间】:2018-11-26 21:46:55
【问题描述】:

我正在尝试实现可以​​动态地将查询字符串或构建器作为参数的联合。请看下面的代码:

function dynamicUnion(queryString||builder){
baseQuery.union(function () {
//I want to use query string or querybuilder  here instead.
     this.select('*').from('users').whereNull('first_name');
        })
     }

代替行:this.select('*').from('users').whereNull('first_name'),我想实现类似:this.raw(queryString||builder) 或任何可行的替代方案,尽管在该块中使用this 关键字时我没有遇到.raw() 方法.

我正在以这种方式实现它,因为要在 union 中使用的 select 查询会有所不同,并且如果动态传递它会很有效。

【问题讨论】:

    标签: mysql node.js knex.js


    【解决方案1】:

    听起来像 knex 中的一个错误,this.raw 在这种情况下不起作用。这是将原始查询传递给联合的一种方法:

    const Knex = require('knex');
    
    
    const knex = Knex({
      client: 'mysql',
    });
    
    knex('foo').union(knex.raw('foo bar')).toSQL();
    
    // outputs "select * from `foo` union foo bar"
    

    https://runkit.com/embed/10boda0lt1it

    【讨论】:

    • 是的,union() 可以将构建器作为参数但没有记录。 this() 也应该。
    • 在 knex 查询构建器中应该允许参数几乎无处不在(遗憾的是,API 中仍然存在很多不一致之处)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多