Spécifier des champs spécifiques avec Sequelize (NodeJS) au lieu de *
D'accord, j'ai donc un projet dans NodeJS où j'utilise Sequelize pour un ORM MySQL. La chose fonctionne fantastiquement mais j'essaie de comprendre s'il y a un moyen de spécifier quels champs sont retournés sur une base de requête ou s'il y a même un moyen de faire un .query() quelque part.
Par exemple, dans notre base de données utilisateur, il peut y avoir des quantités ridicules d'enregistrements et de colonnes. Dans ce cas, je dois retourner trois colonnes seulement pour qu'il soit plus rapide d'obtenir seulement ces colonnes. Cependant, Sequelize interroge simplement la table pour tout " * " pour remplir le modèle d'objet complet autant que possible. C'est la fonctionnalité que je voudrais contourner dans ce domaine particulier de l'application.
2 réponses
, Vous devez spécifier les attributs en tant que propriété de l'objet que vous passez à findAll():
Project.findAll({attributes: ['name', 'age']}).on('success', function (projects) {
console.log(projects);
});
Comment j'ai trouvé ceci:
La requête est d'abord appelée ici: https://github.com/sdepold/sequelize/blob/master/lib/model-definition.js#L131
Puis, se construit ici: https://github.com/sdepold/sequelize/blob/master/lib/connectors/mysql/query-generator.js#L56-59
Essayez ceci dans nouvelle version
template.findAll({
where: {
user_id: req.params.user_id //array
},
attributes: ['id', 'template_name'], //object
}).then(function (list) {
res.status(200).json(list);
})