在 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 中,我如何生成一个计数数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组作为 Laravel 查询生成器的 SELECT 参数传递

如何使用 Laravel 的流畅查询构建器选择计数?

在 Laravel 8 Blade 中使用多维数组

如何在 PHP 中从具有 2 个计数的数组创建 2 个集合?

如何使用从 laravel 中的数组中获取的各种术语进行 mysql 关联查询

如何在 Laravel 4 中选择相关模型计数为 0 的模型?