首页 > 解决方案 > Foreach 给我第一个循环和空集合的数据

问题描述

我的控制器中有一个 foreach 传递给视图:

 public function index()
{
    $budgets=\App\Budget::all();
    $transactions=\App\Transaction::select('transaction_ammount');

    foreach($budgets as $budget){
        $budgetThisCategory[$budget->id]=$transactions->whereMonth('transaction_date',Carbon::today()->format('m'))->where('category_id',$budget->category_id)->get();
    }

    return view('budgets.index',compact('budgets','id','transactions','budgetThisCategory'));
}

当我 dd 我的观点时,我得到以下信息:

array:2 [▼
  1 => Collection {#832 ▼
    #items: array:6 [▼
      0 => Transaction {#825 ▶}
      1 => Transaction {#826 ▶}
      2 => Transaction {#827 ▶}
      3 => Transaction {#828 ▶}
      4 => Transaction {#829 ▶}
      5 => Transaction {#830 ▶}
     ]
   }
   2 => Collection {#868 ▼
     #items: []
   }
 ]

所以我只得到了我的第一个 foreach 集合,但没有得到我的第二个集合。第二个有数据。事实上,如果我更改我的控制器并添加一个 orderbydesc('$budget_id') 我将得到第二个集合,但不是第一个。

我究竟做错了什么?我对此很陌生,我相信解决这个问题的方法很简单。但我真的不知道有什么问题。

标签: laravelforeach

解决方案


马修感谢您的回答。你让我走上了一条我不知道它存在的道路。我已经把所有的 foreach 变成了一个完全不同的东西,更漂亮更简单。另外,我添加了一些功能。我想有更好的方法来做到这一点。但我真的很高兴我到达的地方。

$budgets=\App\Budget::get();

    foreach($budgets as $budget){
        $budgetCount[$budget->id]=$budget->find($budget->id)->transactions()->whereMonth('transaction_date',Carbon::today()->format('m'))->count();
        $budgetSum[$budget->id]=$budget->find($budget->id)->transactions()->whereMonth('transaction_date',Carbon::today()->format('m'))->sum('transaction_ammount');
    }

推荐阅读