我将如何在环回模型中使用聚合函数?如果我有一个由 mysql 数据库支持的模型,我是否可以让 Model1 与 Model2 具有 hasMany 关系(具有给定的数字属性),并在 Model1 中拥有一个从 Model2 获取该字段的 SUM 的属性?
{
"Model1" : {
"Relations" : {
"model2s" : {
"type": "hasMany",
"model": "Model2",
"foreignKey": "model1Id"
}
},
"Properties" : {
"total" : {
"type": "Number"
[SUM of Model2 'amount' field]
}
}
},
"Model2" : {
"Relations" : {
"model1s" : {
"type": "belongsTo",
"model": "Model1",
"foreignKey": "model1Id"
}
},
"Properties" : {
"amount" : {
"type": "Number"
}
}
}
}
另一方面,在模型中放置条件的正确方法是什么,以便 getter 返回的值取决于某个表达式?我想从关系中返回一个值(如果存在),否则返回主模型上存在的值。
我已经尝试过这个(伪代码):
module.exports = function(MyModel) {
MyModel.on('attached', function() {
var app = MyModel.app;
MyModel.getter['total'] = function() {
return (this.model1Id ? this.model1.total : this.total);
};
});
};
然而,我最终得到了RangeError: Maximum call stack size exceeded
错误(类似于这个问题)。我假设这是因为它一遍又一遍地递归调用 getter,但我不确定解决问题的方法。
提前致谢...
这可以通过 Loopback 来完成操作钩子.
Model1.observe('loaded', function (ctx, next) {
if (ctx.instance) {
var sum = 0;
Model1.app.models.Model2.find({
where: {
model1Id: ctx.instance.id
},
fields: {
givenNumericProperty: true
}
}, function (err, model2s) {
if (err) return next(err);
if (model2s.length) {
model2s.forEach(function (model2) {
sum += model2.givenNumericProperty;
});
ctx.instance.calculatedProperty = sum;
}
return next();
});
} else {
return next();
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)