如何在sailsjs生命周期方法中循环一个集合?

时间:2018-04-15 19:38:26

标签: sails.js

我是sailsjs的新手,所以这可能是一件简单的事情,但我似乎无法找到我想要的东西。在我的MyModel中,我想循环遍历事物集合并获取things.id字段的列表(我正在使用mySQL)并将它们填充到values.schedule字符串中并使用MyModel记录保存它。 如何在myModel的afterUpdate或afterCreate方法中执行此操作?需要在那里完成,因为在创建MyModel时会填充事物集合。假设MyThing模型非常简单,只有一个名称及其自己的id字段和MyModel.id字段或引用。

 /**
 * MyModel.js
 */

module.exports = {

  schema: true,
  tableName: 'my_model',
  autoCreatedAt: false,
  autoUpdatedAt: false,

  attributes: {

    id: {
      type: 'integer',
      unique: true,
      primaryKey: true,
      autoIncrement: true
    },
    things: {
      collection: "MyThing",
      via: 'MyModel'
    },

    schedule: {
      columnName: 'schedule',
      type: 'json',
      size: 512
    },
    ... other attributes ...

    toJSON: function() {
      var obj = this.toObject();
      return obj;
    }

  },

  .... other methods ...

  afterUpdate: function(values,  cb) {
    console.log('afterUpdate  : ', values);
    var things =  MyThing.find({
      where: {myModel: values.id},
      select: ['id']
    });
    console.log('MyModel afterUpdate  : ', things);
    cb();
  }
};

在上面的代码中,我会收到错误:

ReferenceError: MyThing is not defined

感谢您的帮助。

更新:

这是给我的东西的代码:

afterCreate: async function(values, next) {
...
  var things =  await MyThing.find({
      where:  {myModel: values.id},
      select: ['id']
    });
...
}

1 个答案:

答案 0 :(得分:1)

afterUpdate作为第一个参数theUpdatedRecord,因此您可以执行以下操作:

  afterUpdate: async function(updatedRecord,  cb) {
               console.log('afterUpdate  : ', updatedRecord);
               var things =  await MyModel.find({ id: 
               updatedRecord.id}).populate('things');
               var ids = things.map(thing => thing.id));
               console.log('MyModel afterUpdate  : ', ids); 
               cb();
              }
  

afterUpdate只会在fetch元标记设置为true的查询上运行。