2014-03-02 49 views
5

我有一个订单表,其中有一个状态列。选择不同的值计数laravel

我试图让各状态下的计数是这样的:

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

但是,这并不有效,因为我不得不打一个电话,每一个状态类型。

如何减少查询次数?

回答

8

你可以尝试

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

像魔术一样工作。感谢名单! – TodStoychev

9

为了使SQL请求:

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

在Laravel,你可以尝试以下方法:

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

这值得赞赏。我看到很多人这样做是错误的 - 这是正确的。 –

+0

这种方法有时工作更快。 –

0

这里是你写的方式 - >

$ users = DB :: table('表名 ') - >不同的() - >的get([' 列名']); $ users_count = $ users-> count();