0

当我更新模型时,waterlock.update()总是返回一个对象数组,即使我设置了标准 a primaryKey

在我的代码上

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

为了使用更新的记录,我必须指出0索引之类updatedRecord[0]的东西我认为不是很干净。根据 Sails 中的文档update(),这是一个常见的场景。

知道了,我有两个问题:

  1. 当您发现一个模型只返回该模型的更新对象而不是数组时,这不是更好吗?

  2. 如果这是一个约定,那么当只影响一个记录时,如何覆盖这个函数以便只返回一个对象而不是一个数组?.update()

4

2 回答 2

1

这是一个约定,它将更新与查找条件匹配的所有记录,但由于您可能在模型上使用了唯一验证,它可能会返回一个 1 或 0 的数组。您需要在手边进行。

您可以通过实现与默认水线同名的方法来覆盖模型中的方法。但是由于您需要完全重写代码,因此它是不可行的。既不改变水线底层代码。

一个解决方案是在您的广告模型上创建一个新函数:

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

还。避免使用 id 作为模型属性(使用其他名称),因为某些数据库(如 mongodb)已经将此属性添加为默认值,并且可能会与您的模型发生冲突。

于 2017-02-03T13:09:56.737 回答
0

我不认为它可能与水线。这是因为 update 方法是一个通用的方法,在 where 条件总是不是这样的情况下传递一个主键。

于 2017-02-02T05:01:38.760 回答