Javascript 我可以有条件地将where()子句添加到knex查询中吗?
我想在查询中添加一个Javascript 我可以有条件地将where()子句添加到knex查询中吗?,javascript,node.js,knex.js,Javascript,Node.js,Knex.js,我想在查询中添加一个where()子句,但有条件地添加。具体地说,我只希望在URL中传递sepecific querystring参数时添加它。这可能吗?如果可能,我将如何着手 router.get('/questions', function (req, res) { knex('questions') .select('question', 'correct', 'incorrect') .limit(50) .where('somec
where()
子句,但有条件地添加。具体地说,我只希望在URL中传递sepecific querystring参数时添加它。这可能吗?如果可能,我将如何着手
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);
});
});
router.get('/questions',函数(req,res){
knex(“问题”)
.选择('问题'、'正确'、'不正确')
.限额(50)
.where('somecolumn',req.query.param)/您可以通过检查查询字符串是否存在并运行其他查询来完成此操作
router.get('/questions',函数(req,res){
if(req.query.yourQueryString){
//运行更具体的选择
}否则{
knex(‘问题’)。选择(‘问题’、‘正确’、‘不正确’)。限制(50)。其中(
“somecolumn”,req.query.param)//您可以将查询存储在变量中,应用条件where子句,然后执行它,如下所示:
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);
});
});
router.get('/questions',函数(req,res){
var query=knex('问题')
.选择('问题'、'正确'、'不正确')
.限额(50);
if(req.query.param==some_条件)
query.where('somecolumn',req.query.param)/Yes。使用
适用于您的示例:
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);
});
});
实际上,您可以在.where()中使用查询生成器,如下所示:
IMO@ItaiNoam的答案应该是正确的.modify()
谢谢!我想应该是:if(req.query.param){queryBuilder.where('somecolumn',req.query.param);}这是一种完美的方法。绝对应该是公认的答案。比公认的答案好得多!KNEX文档应该添加这种使用方式。修改-为了支持有条件地应用查询功能,请同时检查其他答案!我可以问一下为什么这种方法的投票率较低吗?这种方法是否有特定的缺点?因为它eems更加干净,允许使用wait
@bzupnick。modify()
构造使您完全处于knex提供的查询生成器API中,这似乎比使用JavaScript解决方案“越野”更干净。knex文档声明modify()
“允许将查询片段和常见行为作为函数进行封装和重用。”因为您提到wait
是一个可取的功能:带有modify
子句的knex查询也可以wait
。
.where((qb) => {condition == true ? do something if true : do something if false })