在 laravel 中,我如何生成一个计数数组?

Posted

技术标签:

【中文标题】在 laravel 中,我如何生成一个计数数组?【英文标题】:In laravel, how do I generate an array of counts? 【发布时间】:2021-07-16 06:59:29 【问题描述】:

例如,我有几个订单,每个订单都与一个区域相关(有 10 个区域)。我想要每个区域的订单数为 10 行。像这样的:

Select count(*) as aggregate from orders group by zone_id

我尝试使用 count 和 groupby 方法,但它会生成一个整数。

Order::groupBy('zone_id')->count();

有什么建议吗?

【问题讨论】:

count(*) 是返回整数对吗? 是的,上面的代码只在第一行返回一个整数 【参考方案1】:

尝试使用 withCount - laravel docs

您需要在区域模型中添加关系,添加以下内容

class Zone extends Model

     public function orders()
     
         return $this->hasMany(Order::class);
     

雄辩的查询 - “订单”是模型中方法的名称(上图)

$zones = Zone::withCount('orders')->get();

然后在你的刀片文件中

@foreach($zones as $zone)
     $zone->name  ---  $zone->orders_count 
@endfoeach

【讨论】:

是的,谢谢你解决了它!我用你提到的方法使用了 pluck 我只需要计数。谢谢!【参考方案2】:

Laravel 的 count() 与 SQL 的计数不同。所以你必须通过 Laravel 的select() 来使用它:

Order::select(DB::raw('COUNT(*) as aggregate'))->groupBy('zone_id')->pluck('aggregate');

【讨论】:

【参考方案3】:

你可以试试这个方法:

Order::selectRaw('*, COUNT(*) as aggregate')->groupBy('zone_id')->get();

【讨论】:

以上是关于在 laravel 中,我如何生成一个计数数组?的主要内容,如果未能解决你的问题,请参考以下文章