Question

I have an orders table where there is a status column.

I am trying to get the count of each status like this :

$pending = Order::where('status','=','pending')->count();
$active = Order::where('status','=','active')->count();

But this is not efficient as am having to make one call for each status type.

How can I reduce number of queries ?

No correct solution

OTHER TIPS

To make an SQL request:

SELECT count(DISTINCT `status_id`) FROM `dbname`.orders WHERE `user_id` = '2';

In Laravel you can try the following:

$user->orders()->distinct()->count(["status_id"]);

You could try

$orders = Order::select(DB::raw('count(*) as order_count, status'))
  ->groupBy('status')
  ->get();

here is the way you write ->

$users= DB::table('table_name')->distinct()->get(['column_name']);
$users_count = $users->count();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top