假设我的数据库中有3个订单
1-1-16
1-4-16
1-15-16
我想要做的是显示两个日期之间每天订单的图表。例如
1-1-16 / 1-5-16
我想要的是
1-1-16 ,1
1-2-16 ,0
1-3-16 ,0
1-4-16 ,1
1-5-16 ,0
如果没有订单,我应该如何获取日期的数据? 我有一个带有created_at字段的Order模型,我可以在其中运行查询。
目前我按日期分组订单:
$variable = Order::select('created_at', DB::raw('sum(total) as totals'), DB::raw('sum(shipping) as totalshipping'))->groupBy(DB::raw('DAY(created_at)'))->OrderBy('created_at', 'desc')->get();
这会给我每天的订单,但不会返回没有订单的日期。
答案 0 :(得分:2)
我会这样做:
ON DELETE SET DEFAULT
对于您没有订单的日期:
use Carbon\Carbon;
$oders = Order::select('id', 'created_at')
->get()
->groupBy(function($date) {
return Carbon::parse($date->created_at)->format('d'); // grouping by date
});
答案 1 :(得分:0)
我建议您在所需范围内创建日期,然后在日期附加订单
用碳创建范围
注意这假设您使用的是具有开始日期,结束日期和订单日期的碳对象。
如果不我强烈建议您使用它们,它们是内置的laravel。 timestamps(created_at,updated_at)默认为碳对象。
$start_date = Carbon\Carbon::createFromFormat('d-m-Y', '11-06-2016');
$end_date = Carbon\Carbon::createFromFormat('d-m-Y', '11-23-2016');
$date_range = [];
//containing the dates from the query and count of orders
$i = 0;
for($date = $start_date; $date->lte($end_date); $date->addDay()) {
$date_range[$i]['date'] = $date->format('m-d-Y');
foreach($orders as $order)
{
if($date==$orders->created_at)
{
$date_range[$i]['orders'] = $order->totals;
}
else
{
$dates_range[$i]['orders'] = 0;
}
}
$i++;
}
现在您可以执行类似
的操作 foreach($date_range as $date)
{
echo 'date: '.$date[date]. orders : .$date['orders'];
}