在 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 参数传递
如何在 PHP 中从具有 2 个计数的数组创建 2 个集合?