2016-06-08 1 views
1

J'ai une table de commande qui a créé_at et je me demandais comment je peux prendre les dernières commandes 24 heures et les grouper par heure et montrer le total des commandes pour cette heure.Nombre de commandes dans les 24 dernières heures

$hourlyOrders = Order::where('created_at', '>', Carbon::now()->subDays(1))->count(); 

Je suppose que j'ai besoin de groupBy hour d'une certaine manière? J'ai juste besoin d'un compte des ordres horaires.

EDIT:

Donc, si je vérifié maintenant il y aurait total des commandes de 9-10h, 8 heures-9 heures, 7 heures-8 heures à travers 24 itérations mais il dépend du moment où la requête est exécutée ... si vous voyez ce que je veux dire.

Répondre

1

Essayez ceci:

$hourlyOrders = Order::where('created_at', '>', Carbon::now()->subDays(1)) 
       ->groupBy(\DB::raw('HOUR(created_at)')) 
       ->count(); 

EDIT:

$orders = DB::table('Order') // write your table name 
     ->selectRaw('count(order_id) as total_orders')) // use your field for count 
     ->where('created_at', '>', Carbon::now()->subDays(1)) 
     ->groupBy(\DB::raw('HOUR(created_at)')) 
     ->get(); 
+0

Il semble que le retour de la total pour la journée pas comme un compte par heure au cours des dernières 24 heures ... merci d'avoir pris le temps d'aider h –

+0

Salut Yasin, Si vous changez -> sélectionnez -> selectRaw cela fonctionne parfaitement :) Merci! –

0

ordinaire SQL groupe par le résultat par heure serait:

SELECT count(*) 
FROM Order 
GROUP BY hour(created_at);