2017-02-01 1 views
0

Lorsque je mets à jour un modèle, le waterlock .update() renvoie toujours un tableau d'objets, même si je définis un critère primaryKey.Remplacer la mise à jour des voiles pour ne renvoyer qu'un seul objet

sur mon code

Ad.update({ id: req.param('id') }, { 
    // desired attributed to be updated 
}).exec(function(err, updatedRecord) { 
    // updatedRecord is always an array of objects 
});  

Et pour utiliser le updatedRecord, je dois signaler à 0 comme indice updatedRecord[0] qui est quelque chose que je considère pas très propre. Selon docs update() in sails, ceci est un escenario commun.

Sachant que, j'ai 2 questions:

  1. ne serait pas mieux que lorsque vous trouvez un retour de modèle juste un objet mis à jour pour ce modèle, pas un tableau?

  2. Si cela est une convention, comment pourrait être substituée cette fonction afin de retourner juste un objet au lieu d'un tableau quand .update() ont seulement affecté un enregistrement?

Répondre

0

Je ne pense pas que ce soit possible avec waterline. C'est parce que la méthode de mise à jour est une méthode généralisée, en passant une clé primaire dans laquelle la condition n'est toujours pas le cas.

0

C'est une convention qu'il va mettre à jour tous les enregistrements qui correspondent aux critères de recherche, mais comme vous utilisez probablement une validation unique sur le modèle, il retournera probablement un tableau de 1 ou 0. Vous devez faire il en main.

Vous pouvez remplacer les méthodes du modèle en implémentant une méthode du même nom que la ligne de flottaison par défaut. Mais comme vous aurez besoin de réécrire complètement le code, ce n'est pas viable. Aucun changement du code sous-jacent de la ligne de flottaison.

Une solution va créer une nouvelle fonction de votre modèle d'annonce:

module.exports = { 
    attributes: { 
    adid: { 
     unique: true, 
     required: true 
    }, 
    updateMe: { 
    } 
    }, 
    updateOne: function(adid, newUpdateMe, cb){ 
    Ad.update({ id: req.param('id') }, { 
    // desired attributed to be updated 
    }).exec(function(err, updatedRecord) { 
     // updatedRecord is always an array of objects 
     if (updatedRecord.length == 1){ 
      return cb(null, updatedRecord[0]); 
     } 
     return cb(null, {}); //also can error if not found. 
    });  
    } 
}; 

également. Évitez d'utiliser id comme attribut de modèle (utilisez un autre nom), car certaines bases de données comme mongodb ajoutent déjà cet attribut par défaut et peuvent provoquer des conflits avec votre modèle.