我知道使用雄辩可能很难实现,但我似乎并没有放弃它无法实现的想法。
我有一个名为finances
的表,部分结构:
amount (float)
type(varchar) - can take either "credit" or "debit"
date(date)
现在,我想要的是:计算"余额"每次交易后 样本:
Type Amount Balance Date(dd/m/yyyy)
--- -------- -------- --------- -----------------
1 credit 5.00 25.00 12-1-2014
2 debit 10.00 20.00 11-1-2014
3 debit 5.00 10.00 10-1-2014
4 credit 15.00 15.00 09-1-2014
您使用Eloquent的建议是什么?
答案 0 :(得分:5)
看起来不是很漂亮但很有效。或者,您可以考虑使用余额选择创建数据库视图,以使代码更清晰。
Finance::select('id', 'amount', 'type', 'date',
DB::raw('@balance := @balance + IF(type = "credit", amount, -amount) AS balance'))
->from(DB::raw('finances, (SELECT @balance := 0) AS balanceStart'))
->get();
因为paginate()
只会查询部分记录(因此会返回不正确的余额),所以你必须自己进行分页......等等。您仍然可以使用Paginator
类。
$allFinances = // query from above
$perPage = 10;
$pagination = App::make('paginator');
$count = $allFinances->count();
$page = $pagination->getCurrentPage($count);
$finances = $this->slice(($page - 1) * $perPage, $perPage)->all();
$items = $pagination->make($items, $count, $perPage);
// pass $items to the view