如何在knex.js中的.select()内部有条件地附加列

我要达到的目的是在满足条件时在.select()内添加列名。 所以我的代码如下:

const type = req.query.type;

knex('some_table').select('id','name',knex.raw('case '+ type +'when 1 then some_table.type else null end'))

此代码的问题是,当type != 1时它返回null,但我希望它什么也不返回。

因此,基本上,如果没有type = 1,它应该添加'type'列,然后不添加任何内容。

有什么想法吗?

doraemon616 回答:如何在knex.js中的.select()内部有条件地附加列

因此,我怀疑您实际上不是在CASE声明之后。这些用于检查列并处理结果集。例如:

knex('some_table')
  .select(
    'id','name',knex.raw(`CASE WHEN ${type} = 'Apricots' THEN 'Apricots!' ELSE 'Not an apricot!' END`)
)

或者使用更简单的形式,

`CASE ${type} WHEN 'Apricots' THEN 'Hey,it's an apricot.' END`

尽管尚不完全清楚,但您似乎想找的是有条件地基于查询字符串选择列。这可以在发出查询之前完成:

const columns = [
  'id','name'
]

if (req.query.type) {
  columns.push(req.query.type)
}

knex('some_table').select(columns)

我希望很明显,允许用户指定结果集中返回哪些列是容易滥用的,因此您应该非常小心,可以指定哪种数据。

如果这不是您想要的,则可能需要澄清一些问题。

,

如何动态地建立一个列名数组,但是要添加它们(例如array.push),然后将它们作为参数传播到select调用中呢?

const myColumns = ['column1']

if (conditionIsTrue){
 myColumns.push('column2')
}

knex('some_table')
  .select(...myColumns) // <--- the ... here turns the array into individual args
本文链接:https://www.f2er.com/3159947.html

大家都在问