sequelize.jsを使用して動的検索パラメーターを使用します
-
26-10-2019 - |
質問
私はフォローしようとしています 彼らのウェブサイトでチュートリアルを続編します.
次のコード行に到達しました。
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);
}
});
他のヒント
今度は、これを試すことができます
{ where: { columnName: { $like: '%awe%' } } }
見る http://docs.sequelizejs.com/en/latest/docs/querying/#operators 更新された構文用
私はこのようにそれをします:
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);
}
});
このようにして、あなたはクラウサスをどこにでもうまく持っていることができます
このコードを試してください
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
{ where: { columnName: { [Op.like]: '%awe%' } } }
Sequelize.utils.Format関数を活用するのはクリーンかもしれません
の受け入れられた答え ["columnName like ?", '%' + x + '%']
Where句の結果、4.41.1の後遺症でこのエラーが発生します。 where
オブジェクトは削除されました。」
仮定: modelName.findAll({ where : { columnName : { searchCriteria } } });
使用 [Op.like]: '%awe%'
また $like: '%awe%' }
検索基準(columnnameで見つけたい値は「a敬」があります)が両方とも、のような句を持つSQLになります LIKE '\"%awe%\"'
. 。余分な引用符に注意してください。 [op.like]および$ wirk asはお互いのエイリアスであり、動的検索パラメーターを許可しないため、OPの質問には答えません。
使用 [Op.like] : `%${parameter}%`
検索基準(「パラメーター」は列の名前で値を見つけたいパラメーター)が、のような句を持つSQLをもたらしたため LIKE '\"%findMe\"'
パラメーター= 'FindMe'の場合。繰り返しますが、余分な引用符に注意してください。結果がありません。
の答え 別のStackOverFlow投稿 使用することをお勧めします [Op.like]: [`%${parameter}%`]
検索基準の場合(「パラメーター」は、列名で見つけたい値のパラメーターです)。正方形のブラケットに注目してください!これにより、同様の句があるSQLが生じました LIKE '[\"%findMe%\"]'
パラメーター= 'FindMe'の場合。再び、余分な引用符と四角い括弧に注意してください。結果がありません。
私にとって、解決策は生のクエリを使用することでした。Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');