【问题标题】:Override sails update to return just one object覆盖风帆更新以仅返回一个对象
【发布时间】:2017-02-01 15:28:14
【问题描述】:

当我更新模型时,waterlock .update() 总是返回一个对象数组,即使我设置了标准 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],我认为这不是很干净。根据文档update() in sails,这是一个常见的场景。

知道了,我有两个问题:

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

  2. 如果这是一个约定,.update() 只影响一条记录时,如何重写此函数以便只返回一个对象而不是数组?

【问题讨论】:

    标签: arrays callback sails.js sails-postgresql waterlock


    【解决方案1】:

    这是一个约定,它将更新与查找条件匹配的所有记录,但由于您可能在模型上使用 unique 验证,它可能会返回一个 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)已经将这个属性添加为默认值,并且可能会与您的模型发生冲突。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 2019-08-21
        • 2014-02-13
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多