即使没有交易,我也会尝试为每个日期获取价值:
$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?。
感谢。
答案 0 :(得分:1)
更新:添加了新解决方案(无需加入)
这个想法非常简单:如果您今天没有交易,今天的日期不在您的交易表中。
解决方案也很简单:您需要存储每个日期:
每天00:00:00运行一个插入空交易的cronjob。因此,您可以在事务表中获取每个日期而无需加入另一个表。
小心:只有当某个日期存在“真实”交易时,才应删除“假”(空)交易。
备选方案1 :
id
和date
)的表格,例如2015-01-01至2025-12-31 示例查询:
SELECT * FROM dates d LEFT JOIN transactions t ON t.date_id = d.id
不是将日期存储在事务表中,而是将外键存储到日期表中。
备选方案2:
id
和date
)备选方案3: