Суммарный результат Laravel Foreach с фильтром while - PullRequest
1 голос
/ 30 июня 2019

Вот моя таблица

: chart_of_account_category
id
name

: chart_of_accounts
id
chart_of_accounts_category_id

: ledger_book
id
транзакция_id
chart_of_accounts_id

: транзакция
id
имя
дата
всего

это то, чтоЯ хочу достичь

Контроллер

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

Blade / View

@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 голосов
/ 30 июня 2019

Вместо оператора «лайк» вы можете использовать
->whereYear('transaction.date', '2019')->whereMonth('transaction.date', '06').


Кроме того, я бы посоветовал вам нетерпеливо загрузить ChartOfAccounts, LedgerBook и Transaction в вашем контроллере. Это сделает ваши 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...