Domanda

Sto cercando di seguire il Sequelize tutorial sul loro sito web .

Ho raggiunto la seguente riga di codice.

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

Se ho modificarlo un po 'come segue

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

tutto funziona bene. Tuttavia quando provo a fare il parametro di ricerca dinamica nel modo seguente

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

Non è più restituisce alcun risultato. Come posso risolvere questo problema?

È stato utile?

Soluzione

Credo che l'hai fatto in questo modo:

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

Quindi, se stavi facendo questo con una variabile reale devi usare:

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

Altri suggerimenti

Ora sul Sequelize si può provare questo

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

http://docs.sequelizejs.com/en/latest/ docs / interrogazione / # operatori per aggiornato sintassi

vorrei farlo in questo modo:

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

In questo modo è possibile avere ben più DOVE clausas

Si prega di provare questo codice

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

Potrebbe essere più pulito di sfruttare la funzione di Sequelize.Utils.format

La risposta accettata ["columnName like ?", '%' + x + '%'] per il quale i risultati clausola in questo errore in Sequelize 4.41.1: "Il supporto per le sostituzioni letterali nell'oggetto where è stato rimosso"

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

Utilizzando [Op.like]: '%awe%' o $like: '%awe%' } come il searchCriteria (dove 'timore' è il valore che si desidera trovare in columnName) sia risultato in SQL con una clausola LIKE di LIKE '\"%awe%\"'. Notare le virgolette aggiuntive. [Op.like] e $ come sono alias l'uno dall'altro e non rispondere alla domanda del PO, perché non permettono parametri di ricerca dinamica.

Utilizzo [Op.like] : `%${parameter}%` come il searchCriteria (dove 'parametro' è il parametro il cui valore si desidera trovare in columnName) ha comportato SQL con una clausola LIKE di LIKE '\"%findMe\"' quando il parametro = 'findme'. Anche in questo caso, notare le virgolette aggiuntive. Nessun risultato.

Una risposta in un altro post StackOverflow ha suggerito di utilizzare [Op.like]: [`%${parameter}%`] per il searchCriteria (dove 'parametro' è il parametro il cui valore si desidera trovare in columnName). Notate le parentesi quadre! Ciò ha provocato SQL con una clausola LIKE di LIKE '[\"%findMe%\"]' quando il parametro = 'findme'. Anche in questo caso notare le virgolette aggiuntive e le parentesi quadre. Nessun risultato.

Per me, la soluzione era quella di utilizzare una query cruda: Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top