【发布时间】:2018-03-12 19:30:39
【问题描述】:
我有两张表,一张transactions 和另一张transaction_charges 每笔交易可能有多个交易费用意味着一个有很多关系。现在我需要的是获取一个月/年/周发生的交易。如果我可以在查询本身内部执行 group by 而不是对模型集合执行循环会更好。
到目前为止,我已经编写了代码来获取交易的总费用
$defaults = collect([]);
/** @var Builder $transactions */
$transactions = app(TransactionServices::class)
->getTransactions($defaults->merge($options))
->has('charges')->has('operation')->selectSub(function ($query){
/** @var Builder $query */
$query->selectRaw('SUM(amount)')->from('transaction_charges tc')
->whereRaw('tc.transaction_id = transaction.transaction_id');
}, 'totalCharge');
但要获得每月结果,我需要进行分组,但我认为分组不会从子查询中获取正确的聚合结果,因为这里我需要的是一个月内 totalCharge 的总和/周/组。那么我如何才能获得费用总计为每月/每年组的交易
【问题讨论】:
-
只写一个原始查询。如果您需要将结果作为 eloquent 集合,请使用
hydrateRaw()。 -
如果您添加表/模型结构并解释您的用例,将会有所帮助。
-
有两个表
transactions和transaction_charges并且transactions和transaction_charges之间存在has many关系。我需要的是获取一个按“月/年/日”分组的transactions模型集合,这些模型具有额外的模型属性,这些属性代表该组相关交易的总交易费用的总和 -
@PaulSpiegel 实际上也没有针对上述情况获得原始查询解决方案。