私は 彼らのウェブサイトのチュートリアルを続編する に従おうとしています。
次のコード行に到達しました。
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);
}
});
結果を返さなくなりました。どうすればこれを修正できますか?
私はあなたがこのようにするだろうと思います:
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);
}
});
Sequelizeでこれを試すことができます
{ where: { columnName: { $like: '%awe%' } } }
更新された構文については、 http://docs.sequelizejs.com/en/latest/docs/querying/#operators を参照してください。
このコードを試してください
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
{ where: { columnName: { [Op.like]: '%awe%' } } }
私はこのようにします:
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句をより多く持つことができます
Sequelize.Utils.format関数を利用する方がクリーンな場合があります
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%"');