Laravel 拉雷维尔雄辩伯爵

Laravel 拉雷维尔雄辩伯爵,laravel,eloquent,Laravel,Eloquent,我有一个名为project的表,它有一个名为status的列,它有4个值:created、active、done和cancelled。 如果可能,我希望在一次查询中获得每个状态的count对象: [ "created" : 5, "active" : 34, "done" : 7, "cancelled" : 5 ] 您可以通过原始查询来完成 $rows = DB::select('SELECT count(*) as cnt, status_id FROM `

我有一个名为project的表,它有一个名为status的列,它有4个值:created、active、done和cancelled。 如果可能,我希望在一次查询中获得每个状态的count对象:

[
    "created" : 5,
    "active" : 34,
    "done" : 7,
    "cancelled" : 5
]

您可以通过原始查询来完成

$rows = DB::select('SELECT count(*) as cnt, status_id FROM `projects` WHERE 1 group by status');
结果:

array:5 [
  0 => {
    "cnt": 1
    "status": 'status1'
  }
  1 => {
    "cnt": 882
    "status": 'status2'
  }
]
在结构中转换

$data = [];
foreach ($row as $row) {
   $data[$row->status] = $row->cnt;
}

通过这样做,您可以在一个查询中获得它

$status=Project::select('status')->get();
$result=$status->groupBy('status')->map(fn($v)=>$v->count());
$status->count()//总数,
$result//这是您想要的结果。

列的类型是什么?是否也可以获得总计数?在一个查询中,我认为不可以,但您可以在循环中进行