我是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']
});
...
}
答案 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
的查询上运行。