1-我很抱歉这个头衔,我无法更好地描述我的复杂情况。
2-我有一个双重会计系统的表格,我试图计算特定日期的余额,直到特定的交易,并且由于前端的具体情况我需要得到一个结果单一查询。
表示例如下:
| id | date | amount |
| --- | ---------- | ------ |
| 93 | 2018-03-02 | -200 |
| 94 | 2018-01-23 | 250 |
| 108 | 2018-03-05 | 400 |
| 120 | 2018-01-23 | 720 |
| 155 | 2018-03-02 | -500 |
| 170 | 2018-03-02 | 100 |
这是我在每个事务的循环中使用的简单查询,因为我想在每次事务处理后显示新的BALANCE:
... for ...
Transactions::where('date', '<=', $item->date)->get()
... end ...
该查询在当天结束时返回余额,表示直到当天的最后一笔交易,我不想要此结果。
期望的结果是通过以下方式实现的:
... for ...
Transactions::where('date', '<=', $item->date)
-> and transaction is < index of current $item
->get()
... end ...
当然我无法使用该ID,因为在这种情况下ID与此无关,因为整个排序和计算操作都与日期有关。
基本上我想要的是一个查询,以获取从石器时代到特定日期的所有交易但排除在CURRENT之后(在循环中)所做的所有交易。
例如,在上表情况下查询:
Transaction ID # 93 should return: 93
Transaction ID # 94 should return: 94
Transaction ID # 108 should return: 94,120,93,155,170,108
Transaction ID # 120 should return: 94,120
Transaction ID # 155 should return: 94,120,155
..
...
....
要获取的最后一个交易应该是当前交易。
我希望我能清楚地说清楚,我花了3天时间寻找解决方案,然后我想出了这个缓慢的方法:
$currentBalance = Transaction::where('date', '<=', $item->date)->get(['id']);
$array = array();
foreach ($currentBalance as $a) {
$array[] = $a->id;
}
$newBalanceA = array_slice($array, 0, array_search($item->id, $array) + 1);
$currentBalance = Transaction::whereIn('id', $newBalanceA)->sum('amount');
return $currentBalance;
它很慢而且很脏,如果可能的话,我很感激在一个查询中用一个简单的解决方案来保存我。