我有订单和 Order_Items 表。应用线路折扣和订单折扣后,我需要计算含增值税和不含增值税的总额。如何计算最终价格(含税)?我正在使用 Laravel 并使用关系,一旦我有大约 20k 个订单和 70k 个 order_items,它就会变得非常慢。
订单
- id(PK)
- 用户 ID
- 注册 ID
- 促销时间
- 有折扣
- discount_is_percentage
- 折扣金额
订单商品
- id(PK)
- order_id(FK)
- 有折扣
- discount_is_percentage
- 折扣金额
- 价格
- 数量
- 增值税税率
首先,我计算应用折扣的商品级别的不含税和含税价格。然后将它们相加即可得到销售总额。通过将订单折扣应用于总额来计算订单折扣。将折扣应用于商品以计算折扣后的商品价格。然后将商品金额相加即可得到订单总额。我在 Laravel 模型和集合中完成了所有这些工作,如果有几千个条目,那么一切都可以正常工作,但随着列表的增长,它需要越来越长的时间。
我应该将计算值直接存储在订单表中吗?或者我还能如何优化这个查询。我需要长达一年的报告,对于给定的客户,一年内的计数可能达到数百万。
我还将制作按不同列(user_id、register_id)以及按天和小时分组的报告。所以 Eloquent 收集目前可以工作,但速度非常慢。
我使用的是 Laravel 5.2
最佳答案
我建议您将访问器
添加到您的Order
模型中。
像这样的事情应该可以解决问题:
// comment it out if you don't need it in your model
protected $appends = ['total'];
public function getTotalAttribute()
{
$items = $this->items();
// do the needed calculations
return $result;
}
编辑
由于主要问题是性能,您可以改用更改器(mutator)
和排队
计算/保存过程
。因此,您可以计算 order
保存/更改的总计,并将结果放入 orders
表中。
关于php - Mysql 查询或 Eloquent 根据商品计算总计以及订单和商品级别的折扣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337963/