javascript - ¿Puedo agregar condicionalmente una cláusula where() a mi consulta de knex?
node.js knex.js (3)
Puede almacenar su consulta en una variable, aplicar su cláusula condicional where y luego ejecutarla, así:
router.get(''/questions'', function(req, res) {
var query = knex(''questions'')
.select(''question'', ''correct'', ''incorrect'')
.limit(50);
if(req.query.param == some_condition)
query.where(''somecolumn'', req.query.param) // <-- only if param exists
else
query.where(''somecolumn'', req.query.param2) // <-- for instance
query.then(function(results) {
//query success
res.send(results);
})
.then(null, function(err) {
//query fail
res.status(500).send(err);
});
});
Quiero agregar una cláusula where()
en mi consulta, pero condicionalmente . Específicamente, quiero que se agregue solo si se pasa un parámetro de cadena de consulta específico en la URL. ¿Es esto posible y, de ser así, cómo lo haría?
router.get(''/questions'', function (req, res) {
knex(''questions'')
.select(''question'', ''correct'', ''incorrect'')
.limit(50)
.where(''somecolumn'', req.query.param) // <-- only if param exists
.then(function (results) {
res.send(results);
});
});
Puede hacerlo comprobando si su cadena de consulta está presente y ejecutando una consulta diferente.
router.get(''/questions'', function(req, res) {
if (req.query.yourQueryString) {
// Run your more specific select
} else {
knex(''questions'').select(''question'', ''correct'', ''incorrect'').limit(50).where(
''somecolumn'', req.query.param) // <-- only if param exists
.then(function(results) {
res.send(results);
});
}
}
});
Sí. Utilizar modify
Como se aplica a su ejemplo:
router.get(''/questions'', function (req, res) {
knex(''questions'')
.select(''question'', ''correct'', ''incorrect'')
.limit(50)
.modify(function(queryBuilder) {
if (req.query.param) {
queryBuilder.where(''somecolumn'', req.query.param);
}
})
.then(function (results) {
res.send(results);
});
});