Laravel Foreach和while过滤器的求和结果

时间:2019-06-30 11:07:52

标签: laravel foreach

这是我的桌子

:帐户科目表类别
id
名称

:帐户图表
id
chart_of_accounts_category_id

:总帐本
id
transaction_id
chart_of_accounts_id

:交易
id
名称
日期
总计

this is what i want to achieve

控制器

$chart_of_accounts_category = ChartOfAccountsCategory::get();
return view ('backend.ledger_book.index', compact('chart_of_accounts_category'));

刀片/视图

@foreach ($chart_of_accounts_category as $account_category )
   @foreach ($account_category->ChartOfAccounts as $item)
     $item->LedgerBook->where('chart_of_accounts_id', $item->id)->sum('transaction.total'), 2)
   @endforeach
@endforeach

我可以通过这得到总和,但是我仍然需要过滤一些东西,这是我在刀片中完成的。但是无法使过滤器正常工作,尤其是在像符号%那样的情况下,我会尽量减少刀片内的查询,是否有任何地方可以通过控制器获得结果?

$item->LedgerBook->where('chart_of_accounts_id', $item->id)->where('transaction.date', 'like', '2019-06-%')->sum('transaction.total'), 2)

1 个答案:

答案 0 :(得分:0)

您可以使用
代替'like'运算符 ->whereYear('transaction.date', '2019')->whereMonth('transaction.date', '06')


此外,我建议您在控制器中使用eager load ChartOfAccountsLedgerBookTransaction。这将使您的foreach循环更快。

$chart_of_accounts_category = ChartOfAccountsCategory::with(['chartOfAccounts' => function ($query) { 
  $query->with(['ledgerBooks' => function ($query) {
    $query->with(‘transaction’)
      ->whereHas(‘transaction', function ($query) {
        $query->whereYear('date', '2019')
          ->whereMonth('date', '06');
      });
  }]); 
}])
  ->get();