获取每天两个日期之间的所有订单

时间:2016-03-22 11:23:38

标签: laravel laravel-5.1

假设我的数据库中有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();

这会给我每天的订单,但不会返回没有订单的日期

2 个答案:

答案 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'];
   }