2012-02-17 11 views
15

Sto cercando di seguire lo Sequelize tutorial on their website.Utilizzo dei parametri di ricerca dinamici con Sequelize.js

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 rendere dinamico il parametro di ricerca 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); 
    } 
}); 

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

+0

ho trovato la formulazione della tua domanda un po 'di confusione, così l'ho modificato Spero di aver capito bene, per favore sentiti libero di cambiarlo se pensi che ho sbagliato. –

risposta

19

penso che hai fatto in questo modo:

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

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

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

4

lo farei 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

17

Ora sul Sequelize si può provare questo

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

Vedi http://docs.sequelizejs.com/en/latest/docs/querying/#operators per la sintassi aggiornate

+0

Buona risposta semplicistica. Nota rapida per i nuovi utenti, titolo è il nome della colonna in cui si desidera trovare la corrispondenza. – JnL

+0

Grazie a @JMM l'ho risolto;) –

Problemi correlati