Laravel 4.2将缺少的日期范围添加到日期范围查询中

时间:2016-06-20 06:17:18

标签: php laravel

现在我正在从db导出到csv函数。

我完成它的漫长旅程,csv文件中格式或样式的一部分是每天列出性能报告,包括根本没有销售的日子。这是客户要求。

我有很多问题要问,但现在这是主要的优先事项。

我有疑问:

$period = DB::table('reports')->select('id','quantity','created_date')->whereBetween('created_date',$timerange)->where('branch_id',$br_id)->orderBy('created_date','asc')->get(); 

结果: (我正在使用var_dump)

array (size=3)
 0 => 
array (size=2)
  'created_date' => string '2016-02-18 00:00:00' (length=19)
  'quantity' => int 1
1 => 
array (size=2)
  'created_date' => string '2016-02-20 00:00:00' (length=19)
  'quantity' => int 1
2 => 
array (size=2)
  'created_date' => string '2016-02-23 00:00:00' (length=19)
  'quantity' => int 1

问题是即使在该日期没有记录,如何将结果转化为此。

示例:

array (size=3)
0 => 
array (size=2)
  'created_date' => string '2016-02-18 17:21:04' (length=19)
  'quantity' => int 1
1 => 
array (size=2)
  'created_date' => string '2016-02-19 17:21:04' (length=19)
  'quantity' => int 0
2 => 
array (size=2)
  'created_date' => string '2016-02-20 00:00:00' (length=19)
  'quantity' => int 1
3 => 
array (size=2)
  'created_date' => string '2016-02-21 00:00:00' (length=19)
  'quantity' => int 0
4 => 
array (size=2)
  'created_date' => string '2016-02-22 00:00:00' (length=19)
  'quantity' => int 0
5 => 
array (size=2)
  'created_date' => string '2016-02-23 00:00:00' (length=19)
  'quantity' => int 1

谢谢

1 个答案:

答案 0 :(得分:1)

好的,我在编辑后检查过这个问题。根据我的理解,您需要在查询结果中包含数据库中不存在的日期。您有两种选择:

第一次 - 使用DatePeriod PHP class生成两个日期之间的日期:

$period = new \DatePeriod(
            new \DateTime('2010-10-01'),
            new \DateInterval('P1D'),
            new \DateTime('2010-10-05')
        );

在从数据库中提取结果之后,循环遍历所有记录,如果查询结果中不存在$ period中存在的日期,则只需将其添加到检索到的相同格式的结果数组中来自数据库。

第二次 - 您检查答案here

希望这有帮助。