web-dev-qa-db-ja.com

Sequelize.jsでの動的検索パラメーターの使用

私は 彼らのウェブサイトのチュートリアルを続編する に従おうとしています。

次のコード行に到達しました。

Project.findAll({where: ["id > ?", 25]}).success(function(projects) {
  // projects will be an array of Projects having a greater id than 25
})

次のように少し微調整すると

Project.findAll({where: ["title like '%awe%'"]}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});

すべてが正常に動作します。ただし、次のように検索パラメータを動的にしようとすると

Project.findAll({where: ["title like '%?%'", 'awe']}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});

結果を返さなくなりました。どうすればこれを修正できますか?

16
Hoa

私はあなたがこのようにするだろうと思います:

where: ["title like ?", '%' + 'awe' + '%']

したがって、実際の変数を使用してこれを行う場合は、次のようにします。

Project.findAll({where: ["title like ?", '%' + x + '%']}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});
18
Paul

Sequelizeでこれを試すことができます

{ where: { columnName: { $like: '%awe%' } } }

更新された構文については、 http://docs.sequelizejs.com/en/latest/docs/querying/#operators を参照してください。

24

このコードを試してください

const Sequelize = require('sequelize');
const Op = Sequelize.Op;
{ where: { columnName: { [Op.like]: '%awe%' } } }
6
Manoj Rana

私はこのようにします:

Project.findAll({where: {title: {like: '%' + x + '%'}, id: {gt: 10}}).success(function(projects) {
  for (var i=0; i<projects.length; i++) {
    console.log(projects[i].title + " " + projects[i].description);
  }
});

このようにして、WHERE句をより多く持つことができます

4
mPrinC

Sequelize.Utils.format関数を利用する方がクリーンな場合があります

0
futbolpal

Where句に対する_["columnName like ?", '%' + x + '%']_の受け入れられた回答により、Sequelize4.41.1でこのエラーが発生します。「whereオブジェクトでのリテラル置換のサポートが削除されました。」

仮定:modelName.findAll({ where : { columnName : { searchCriteria } } });

SearchCriteria(「awe」はcolumnNameで検索する値)として_[Op.like]: '%awe%'_または_$like: '%awe%' }_を使用すると、どちらも_LIKE '\"%awe%\"'_のLIKE句を持つSQLになります。余分な引用符に注意してください。 [Op.like]と$ likeは相互のエイリアスであり、動的検索パラメーターを許可しないため、どちらもOPの質問に答えません。

SearchCriteria( 'parameter'はcolumnNameで値を検索するパラメーター)として_[Op.like] : `%${parameter}%`_を使用すると、parameter = 'findMe'の場合に_LIKE '\"%findMe\"'_のLIKE句を持つSQLが生成されます。繰り返しますが、余分な引用符に注意してください。結果がありません。

別のStackOverflow投稿 の回答は、searchCriteriaに_[Op.like]: [`%${parameter}%`]_を使用することを提案しています(ここで、「parameter」は、columnNameで値を検索するパラメーターです)。角括弧に注意してください!これにより、parameter = 'findMe'の場合に_LIKE '[\"%findMe%\"]'_のLIKE句を持つSQLが生成されました。ここでも、余分な引用符と角括弧に注意してください。結果がありません。

私にとっての解決策は、生のクエリを使用することでした:Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

0
Bradley Smock