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

问题描述 投票:0回答:1

我想达到的目的是在满足条件时在.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'列,然后不添加任何内容。

有什么想法吗?

sql postgresql knex.js postgresql-9.5
1个回答
0
投票

所以,我怀疑您实际上不是在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)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.