【问题标题】:In laravel, how do I generate an array of counts?在 laravel 中,我如何生成一个计数数组?
【发布时间】: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(*) 是返回整数对吗?
  • 是的,上面的代码只在第一行返回一个整数

标签: php mysql sql laravel


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 2022-12-21
      • 1970-01-01
      • 2014-09-04
      • 2021-07-04
      • 2019-11-25
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多