Как условно добавить столбцы внутри .select () в knex.js - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь добавить имя столбца в .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, но я хочу, чтобы он ничего не возвращал.

Так что, в принципе, он должен добавить 'введите 'column, если type = 1, если нет, то ничего не добавьте.

Есть мысли?

1 Ответ

1 голос
/ 05 ноября 2019

Итак, я подозреваю, что вы на самом деле не после 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)

Надеюсь, должно быть ясно, что разрешение пользователям указывать, какие столбцы возвращаются в наборе результатов, открыто для злоупотреблений, поэтому вы должны быть очень осторожны,Тип данных может быть указан.

Если это не то, что вы намеревались, вам, возможно, придется уточнить ваш вопрос.

...