我使用Laravel作为我的框架,但这本身不是一个Laravel问题。从一个数组中,我试图显示每个月的结果,如下所示:
<table>
<tr>
<td>January</td>
</tr>
<tr>
<td>First result for january</td>
<td>Second result for january</td>
</tr>
<tr>
<td>February</td>
</tr>
<tr>
<td>First result for february</td>
<td>Second result for february</td>
</tr>
</table>
在我的控制器中,我得到的结果如下:
$results = Expense::whereBetween('date', array($start, $end))->get();
其中$start
和$end
是我从输入中收集的日期,格式为YYYY-MM-DD
。
在我看来,我显示的结果如下(示例):
@foreach($results as $result)
{!! $result->date !!} - {!! $result->expense !!} - {!! $result->amount !!}
@endforeach
但我希望它像上面的例子一样。所以,当我在输入中选择不同的月份时,视图也会发生变化,所以我不能硬编码。我基本上需要更改我的前臂来显示一个月,该月的所有结果都在该月以下,然后显示下一个月
朝着正确的方向轻推会很有帮助。
我会使用Laravel Collections方法对结果进行分组:
$results = Expense::whereBetween('date', array($start, $end))->get();
$results = $results->groupBy(function($expense)
{
return Carbon'Carbon::parse($expense->date)->month;
});
然后你会得到以下格式的结果:
=> Illuminate'Database'Eloquent'Collection {#2708
all: [
1 => Illuminate'Database'Eloquent'Collection {#1427
all: [
App'Expense {#1410 …27},
App'Expense {#3077 …27},
App'Expense {#1408 …27},
...
],
},
2 => Illuminate'Database'Eloquent'Collection {#1428
all: [
App'Expense {#1310 …27},
App'Expense {#3377 …27},
App'Expense {#1308 …27},
...
],
},
3 => Illuminate'Database'Eloquent'Collection {#1429
all: [
App'Expense {#1810 …27},
App'Expense {#3877 …27},
App'Expense {#1808 …27},
...
],
},
...
],
}
每个键将代表一个月的数字。