使用laravel eloquent计算(总分类帐)

时间:2014-12-30 20:33:30

标签: php mysql sql laravel eloquent

我知道使用雄辩可能很难实现,但我似乎并没有放弃它无法实现的想法。

我有一个名为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的建议是什么?

1 个答案:

答案 0 :(得分:5)

this answer

启发的SQL魔术

看起来不是很漂亮但很有效。或者,您可以考虑使用余额选择创建数据库视图,以使代码更清晰。

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