laravel 结合原生表达式对不同状态的数据进行统计
$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) // 此方法小小心使用,可能导致sql注入,可用另一个原生方法代替 ->selectRaw('count(*) as user_count, status') 此方法可接收一个可选参数代替问号,如 ->selectRaw('price * ? as price_with_tax', [1.0825]) ->where('status', '<>', 1) ->groupBy('status') ->get();
查询结果示例:
Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [status] => 1 [total_sales] => 100.00 ) [1] => stdClass Object ( [status] => 2 [total_sales] => 1000.00 ) [2] => stdClass Object ( [status] => 3 [total_sales] => 2000.00 ) [3] => stdClass Object ( [status] => 4 [total_sales] => ) ) )
// 添加条件status不等于4的
$users = DB::table('users') ->select('status', DB::raw('SUM(price) as total_sales')) ->groupBy('status') ->whereRaw('status != ?', [4]) ->get();
// 添加条件,总价格大于1900的
$users = DB::table('users') ->select('status', DB::raw('SUM(price) as total_sales')) ->groupBy('status') ->whereRaw('status != ?', [4]) ->havingRaw('SUM(price) > ?', [1900]) ->get();