我想达到的目的是在满足条件时在.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'列,然后不添加任何内容。
有什么想法吗?
所以,我怀疑您实际上不是在CASE
声明之后。这些用于检查列[[values和操作结果集。例如:
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)
我希望很明显,允许用户指定结果集中返回哪些列是容易滥用的,因此您应非常小心,可以指定哪种数据。如果这不是您想要的,则可能需要澄清一些问题。