我正在尝试使用Stradi构建用于费用记录的api。我有旅行,每次旅行都有很多费用。 (一对多的关系)。我想,当我去/ trips时,它还会给我该次旅行的所有费用之和。 (每笔费用都有适当的金额)我只需要在响应而不是在api的模型上的sumField(所以我不能修改它)。我正在使用postrgres。Definetelly我必须修改找到并找到一个控制器,但我不知道如何求和。
此外,如果有可能从graphql进行查询。有帮助吗?
确实,您必须自定义API来添加新的路由和控制器(以保留当前的默认API内容),该路由和控制器将返回所需的内容。
首先,您必须在所需的API中创建路由和控制器。绊倒你。这里有一个名为hello的API的文档-用帖子替换hello。 https://strapi.io/documentation/3.0.0-beta.x/guides/controllers.html#custom-controllers
然后在您的控制器中,您将得到类似这样的内容:
const { sanitizeEntity } = require('strapi-utils');
module.exports = {
async tripsWithSum (ctx) {
let entities;
if (ctx.query._q) {
entities = await strapi.services.trip.search(ctx.query);
} else {
entities = await strapi.services.trip.find(ctx.query);
}
entities = entities.map(entity => sanitizeEntity(entity, { model: Trip }));
entities = entities.map(entry => {
entry = Object.assign(entry, {
sumField: entry.expenses.length
});
});
return entities;
}
};
谢谢,我会尽力的。如果费用是一个关系字段怎么办?旅行将有很多费用。