Frage

Ich versuche dem zu folgen Folgen Sie das Tutorial auf ihrer Website Folgenu.

Ich habe die folgende Codezeile erreicht.

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

Wenn ich es leicht wie folgt optimiere

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

Alles funktioniert gut. Wenn ich jedoch versuche, den Suchparameter wie folgt dynamisch zu machen

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

Es gibt keine Ergebnisse mehr zurück. Wie kann ich das beheben?

War es hilfreich?

Lösung

Ich denke, Sie würden das so machen:

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

Wenn Sie dies also mit einer tatsächlichen Variablen tun würden, die Sie verwenden würden:

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

Andere Tipps

Jetzt können Sie dies ausprobieren

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

Sehen http://docs.sequelizejs.com/en/latest/docs/querying/#operators Für aktualisierte Syntax

Ich würde es auf diese Weise tun:

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

Auf diese Weise können Sie gut mehr dort haben, wo Clausas

Bitte probieren Sie diesen Code aus

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

Es könnte sauberer sein, die Funktion der fequelize.utils.Format zu nutzen

Die akzeptierte Antwort von ["columnName like ?", '%' + x + '%'] Für die WHERE -Klausel führt zu diesem Fehler in der Folge 4.41.1: "Unterstützung für den wörtlichen Ersatz in der where Objekt wurde entfernt. "

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

Verwendung [Op.like]: '%awe%' oder $like: '%awe%' } Da die Suche der Suche (wo 'Ehrfurcht' der Wert ist, den Sie in Spaltenname finden möchten) führen beide zu SQL mit einer ähnlichen Klausel von LIKE '\"%awe%\"'. Beachten Sie die zusätzlichen Anführungszeichen. [Op.like] und $ wie sind Aliase voneinander und beantworten weder die Frage des OP, da sie keine dynamischen Suchparameter zulassen.

Verwendung [Op.like] : `%${parameter}%` Da die Suchkriterie (wobei 'Parameter' der Parameter ist, dessen Wert Sie in ColumnName finden möchten) führte zu SQL mit einer ähnlichen Klausel von LIKE '\"%findMe\"' wenn parameter = 'findMe'. Beachten Sie erneut die zusätzlichen Anführungszeichen. Keine Ergebnisse.

Eine Antwort in Ein weiterer Stackoverflow -Beitrag Vorgeschlagene Verwendung [Op.like]: [`%${parameter}%`] Für die Suche nach SearchCriteria (wobei 'Parameter' der Parameter ist, dessen Wert Sie in ColumnName finden möchten). Beachten Sie die Quadratklammern! Dies führte zu SQL mit einer ähnlichen Klausel von LIKE '[\"%findMe%\"]' wenn parameter = 'findMe'. Beachten Sie erneut die zusätzlichen Anführungszeichen und die Quadratklammern. Keine Ergebnisse.

Für mich bestand die Lösung darin, eine rohe Abfrage zu verwenden:Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top