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();