Динамические свойства или агрегатные функции в моделях с обратной связью
Как мне использовать агрегатные функции в моделях Loopback? Если у меня есть модель, поддерживаемая базой данных mysql, могу ли я иметь Model1 с отношением hasMany к Model2 (с заданным числовым свойством) и иметь свойство в Model1, которое получает SUM этого поля из Model2?
{ "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" } } } }
С другой стороны, как правильно поместить условное выражение в модель, чтобы значение, возвращаемое получателем, зависело от некоторого выражения? Я хочу вернуть значение из отношения, если оно существует, в противном случае вернуть то, которое существует в первичной модели.
Я пробовал это (псевдокод):
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
ошибка (аналогично тому, что отмечено вэтот вопрос). Я предполагаю, что это потому, что он рекурсивно вызывает геттер снова и снова, но я не уверен, как решить проблему.
Заранее спасибо...