我使用这个laravel函数来获取过去30天内创建的所有发票:
$invoice = Invoices::where('created_at', '>=', Carbon::now()->subMonth())->get();
该函数返回一个对象集合,我想要的是获取一个[creation day =>每一个对象在那一天创建的数量。
我正在阅读有关array_count_values但该函数不适用于集合对象。
感谢任何帮助。
答案 0 :(得分:3)
您可能正在寻找groupBy
方法。它允许您将结果分组到集合的集合中。例如:
$invoiceGroup = Invoices::where('created_at', '>=', Carbon::now()->subMonth())
->get()
->groupBy(function($invoice) {
return $invoice->created_at->format('d-M-y');
});
现在,您的所有发票都根据其created_at日期组合在一起。
foreach ($invoiceGroup as $date => $subGroup) {
echo $date . ': ' . $subGroup->count();
}
这将回显created_at日期和该日期的发票数量。要获得个别发票:
foreach ($invoiceGroup as $date => $subGroup) {
foreach ($subGroup as $invoice) {
// Access individual invoices
}
}
答案 1 :(得分:0)
这就是我为解决问题所做的工作:
foreach ($invoice as $key => $value) {
$date = Carbon::createFromFormat('Y-m-d H:i:s', $value->created_at);
$result[$value->quote_number] = $date->day;
}
然后我使用array_count_values($result)
得到我想要的东西,也许有一个内置函数来做我需要的东西,为什么我不会选择这个作为现在的答案。