Laravel计算特定日期和列的结果

时间:2016-04-27 11:32:54

标签: php laravel eloquent laravel-5.1

在我的数据库中,我有以下记录:

id    code   product_amount         created_at
 1    ORD-1      250          2016-04-04 05:15:05 PM
 2    ORD-1      150          2016-04-04 05:15:05 PM
 3    ORD-2      450          2016-04-05 11:18:17 PM
 4    ORD-3      250          2016-04-06 04:30:25 PM
 5    ORD-3      300          2016-04-06 04:30:25 PM
 6    ORD-3      750          2016-04-06 04:30:26 PM
 7    ORD-4      650          2016-04-06 08:30:26 PM
 7    ORD-4      150          2016-04-06 08:30:27 PM

现在我想要的是我想要计算每天下的订单,所以输出应该是:

count  date
  1    2016-04-04 // For ORD-1
  1    2016-04-05 // For ORD-2
  2    2016-04-06 // For ORD-3 and ORD-4

到目前为止我尝试的代码:

$ordersList = Order::latest();

$ordersListDate = $ordersList->selectRaw('date(created_at) as date')
                  ->groupBy('date')->get()
                  ->lists('date')->toArray();

$ordersListCount = $ordersList->select([
    DB::raw('DATE(created_at) AS date'),
    DB::raw('COUNT(code) AS count')
])->groupBy('date')->get()->lists('count')->toArray();

以上控制器在我dd($ordersListCount)时给出:

array:2 [▼
  0 => "2"
  1 => "1"
  2 => "5"
]

我很长时间都在挠头,无法完成这件事。我知道必须有一些愚蠢的事情,我必须错过或不考虑,但我仍处于学习阶段。

非常感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:1)

你想要这样的查询

select count(distinct code) count, date(created_at) as `date`
    from orders
  group by date

但是我不能用你的laravel语言写出来:(

sqlfiddle刚刚回答。它是link

答案 1 :(得分:0)

您必须在(YYYY-MM-DD格式)中添加列日期,切记不要在表格中使用DATETIME格式。然后,您可以按日期轻松对其进行分组,并使用以下查询计算订单:

Order::select(array('date', DB::raw('COUNT(code) AS count')))->groupBy('date')->get();

答案 2 :(得分:0)

Order::select(array(DB::raw('DATE(created_at) AS date')), DB::raw('COUNT(code) AS count')))->groupBy('date')->get();

答案 3 :(得分:0)

我希望以下查询可以解决您的问题。我测试了它......

$ordersListCount = $ordersList->select([
    DB::raw('COUNT(DISTINCT code) as count'),
    DB::raw('DATE(`created_at`) as date')
])->groupBy('date')->get()->toArray();