/ strapi

Strapi:重写服务和模型周期

官方文档

此处需求为:自动计算玻璃订单尺寸中的面积与价格
实现思路:重写update方法,创建与更新时会调用这儿的方法

// glass-order-item 为模型名称
// api\glass-order-item\services\glass-order-item.js
module.exports = {
  async update(params, data) {
    data.area = (data.width * data.height / 1000000).toFixed(2)
    data.totalPrice = data.area * data.price.toFixed(2)
    const validData = await strapi.entityValidator.validateEntityUpdate(
      strapi.models['glass-order-item'],
      data
    );
    return await strapi.query('glass-order-item').update(params, validData);
  },
};

方案二

利用模型的生命周期
当创建或更改时自动计算

module.exports = {
  lifecycles: {
    beforeCreate(data) {
      data.area = data.width * data.height * data.num / 1000000
      data.totalPrice = data.area * data.price
    },
    beforeUpdate(params, data){
      data.area = data.width * data.height * data.num / 1000000
      data.totalPrice = data.area * data.price
    }
  }
};

Strapi:重写服务和模型周期
分享