Question

Je suis en train de suivre le Sequelize tutoriel sur leur site .

J'ai atteint la ligne de code ci-dessous.

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

Si je Tweak suit légèrement

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

fonctionne très bien. Cependant, lorsque je tente de rendre la dynamique des paramètres de recherche comme suit

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

Il ne renvoie aucun résultat. Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Je pense que vous le faire comme ceci:

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

Donc, si vous faites cela avec une variable réelle vous pouvez utiliser:

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

Autres conseils

sur Sequelize vous pouvez essayer

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

Voir http://docs.sequelizejs.com/en/latest/ docs / # / opérateurs interrogation pour la syntaxe mise à jour

Je le ferais de cette façon:

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

De cette façon, vous pouvez avoir bien plus d'où clausas

S'il vous plaît essayer ce code

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

Il pourrait être plus propre à effet de levier de la fonction Sequelize.Utils.format

La réponse acceptée de ["columnName like ?", '%' + x + '%'] pour la clause où les résultats de cette erreur dans Sequelize 4.41.1: «Soutien pour le remplacement littéral dans l'objet where a été supprimé »

En supposant: modelName.findAll({ where : { columnName : { searchCriteria } } });

Utilisation [Op.like]: '%awe%' ou $like: '%awe%' } comme critèreRech (où « la crainte » est la valeur que vous voulez trouver dans columnName) à la fois dans SQL avec résultat une clause LIKE de LIKE '\"%awe%\"'. Notez les guillemets supplémentaires. [Op.like] et $ sont des alias comme de l'autre et ni répondre à la question de l'OP parce qu'ils ne permettent pas de paramètres de recherche dynamique.

Utilisation [Op.like] : `%${parameter}%` comme critèreRech (où « paramètre » est le paramètre dont la valeur que vous voulez trouver dans columnName) a donné lieu à SQL avec une clause LIKE de LIKE '\"%findMe\"' lorsque le paramètre = « findme ». Encore une fois, notez les guillemets supplémentaires. Aucun résultat.

Une réponse un autre poste StackOverflow a suggéré d'utiliser [Op.like]: [`%${parameter}%`] pour le critèreRech (où « paramètre » est le paramètre dont la valeur que vous voulez trouver dans columnName). Remarquez les crochets! Cela a donné lieu à SQL avec une clause LIKE de LIKE '[\"%findMe%\"]' lorsque le paramètre = 'findme'. Encore une fois remarquer les guillemets supplémentaires et les crochets. Aucun résultat.

Pour moi, la solution était d'utiliser une requête brute: Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top