2012-02-17 1 views
15

J'essaie de suivre les Sequelize tutorial on their website.Utilisation de paramètres de recherche dynamiques avec Sequelize.js

J'ai atteint la ligne de code suivante.

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

Si je ruser un peu 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); 
    } 
}); 

tout fonctionne bien. Cependant quand j'essaye de rendre le paramètre de recherche dynamique 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 plus aucun résultat. Comment puis-je réparer cela?

+0

J'ai trouvé le libellé de votre question un peu déroutant, donc je l'ai édité. J'espère avoir bien compris, s'il vous plaît n'hésitez pas à le changer si vous pensez que j'ai foiré. –

Répondre

19

Je pense que vous le faire comme ceci:

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

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

Il pourrait être plus propre à tirer parti de la Sequelize .Utils.format fonction

4

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

17

maintenant sur Sequelize vous pouvez essayer cette

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

Voir http://docs.sequelizejs.com/en/latest/docs/querying/#operators pour la syntaxe à jour

+0

Bonne réponse simpliste. Note rapide pour les nouveaux utilisateurs, title est le nom de la colonne que vous souhaitez trouver le match contre. – JnL

+0

Merci @JMM je l'ai réparé;) –

Questions connexes