51

where()クエリに句を追加したいのですが、条件付きで. 具体的には、特定のクエリ文字列パラメーターが URL に渡された場合にのみ追加します。これは可能ですか?もしそうなら、どうすればいいですか?

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);
        });
});
4

5 に答える 5

119

はい。変更を使用します。

あなたの例に適用されるように:

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);
        });
});
于 2016-03-17T14:59:22.803 に答える
1

実際には、次のように .where() 内でクエリビルダーを使用できます。

.where((qb) => {condition == true ? do something if true : do something if false })

IMO @ItaiNoamの答えは正しいはずです.modify()

于 2019-11-04T07:28:03.757 に答える
-10

クエリ文字列が存在するかどうかを確認し、別のクエリを実行することでそれを行うことができます。

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);
      });
  }
}
});

于 2014-12-04T02:24:37.867 に答える