【问题标题】:Laravel Foreach sum result with while filterLaravel Foreach 和结果与 while 过滤器
【发布时间】:2019-11-11 10:37:29
【问题描述】:

这是我的桌子

:chart_of_account_category
身份证
名字

:chart_of_accounts
身份证
chart_of_accounts_category_id

:ledger_book
身份证
transaction_id
chart_of_accounts_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)

【问题讨论】:

    标签: laravel foreach


    【解决方案1】:

    您可以使用
    ->whereYear('transaction.date', '2019')->whereMonth('transaction.date', '06'),而不是“like”运算符。


    另外,我建议您在 Controller 中使用 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();
    

    【讨论】:

    • ->whereYear('transaction.date', '2019')->whereMonth('transaction.date', '06') 只能在控制器中使用,对吗?事务表的急切负载怎么样?我怎样才能做到这一点?
    • 是的,您也可以预先加载事务。我更新了我的答案以显示这一点。我会在控制器中使用 whereMonth 和 whereYear,但您也可以在视图中使用它们
    • $chart_of_accounts_category = ChartOfAccountsCategory::with(['ChartOfAccounts' => 函数 ($query) { $query->with(['LedgerBook' => 函数 ($query) { $query-> with('Transaction')->where('date', 'like', '2019-06-%'); }]); }]) ->get();似乎工作,但在过滤时,它找不到合适的表。
    • $chart_of_accounts_category = ChartOfAccountsCategory::with(['ChartOfAccounts' => function ($query) use($filter_year, $filter_month) { $query->with(['LedgerBook' => function ( $query) use($filter_year, $filter_month) { $query->with(['Transaction' => function ($query) use($filter_year, $filter_month) { $query->where('date', 'like ', $filter_year.'-'.$filter_month.'%')->where('business_id', session()->get('business_id')); }]); }]); }]) ->得到();通过这个查询解决了,非常感谢那里的伙伴
    • @MohammadIskandar 干得好!不客气。请注意,您可以投票并接受我的回答,以便其他可能提出此问题的人知道这是解决方案。
    猜你喜欢
    • 2014-12-05
    • 2014-06-14
    • 2015-07-20
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多