Laravel为每个用户获取每个日期值

时间:2016-01-22 06:02:11

标签: php laravel

即使没有交易,我也会尝试为每个日期获取价值:

$transaction = Transaction::whereBetween(DB::raw('DATE(created_at)'), ['2015-12-01', '2016-12-31'])
                ->where('vendor_id', $row)
                ->groupBy('vendor_id', DB::raw('DATE(created_at)'))
                ->selectRaw('FLOOR(SUM(amount)) as total, DATE(created_at) as date')
                ->orderBy('created_at')->get();

return $transaction;

我得到的结果:

[{"total":"81739","date":"2015-12-22"},{"total":"82912","date":"2015-12-26"},{"total":"55912","date":"2015-12-27"},{"total":"55599","date":"2015-12-30"},{"total":"77626","date":"2015-12-31"}];

如果没有值,我怎样才能获得每个日期的值?将它插入0?。

感谢。

1 个答案:

答案 0 :(得分:1)

更新:添加了新解决方案(无需加入)

这个想法非常简单:如果您今天没有交易,今天的日期不在您的交易表中。

解决方案也很简单:您需要存储每个日期:

每天00:00:00运行一个插入空交易的cronjob。因此,您可以在事务表中获取每个日期而无需加入另一个表。

小心:只有当某个日期存在“真实”交易时,才应删除“假”(空)交易。

备选方案1

  • 创建一个包含日期(包含iddate)的表格,例如2015-01-01至2025-12-31
  • 选择您的日期并离开加入交易表

示例查询:

SELECT * FROM dates d LEFT JOIN transactions t ON t.date_id = d.id

不是将日期存储在事务表中,而是将外键存储到日期表中。

备选方案2:

  • 创建日期表(包含iddate
  • 每00:00:00运行一次插入当前日期的cronjob
  • 选择您的日期并离开加入交易表

备选方案3:

  • 使用php的DateInterval生成日期范围
  • 将交易表中的记录链接到范围的每个正确日期