【问题标题】:Laravel Eloquent return count of each group with groupBy()Laravel Eloquent 使用 groupBy() 返回每个组的计数
【发布时间】:2016-12-07 14:07:39
【问题描述】:

我想使用 Laravel Eloquent 来 groupBy() 任务。我已经搜索了互联网,并没有找到任何雄辩的东西。 有些人将 groupBy() 查询与查询生成器一起使用,例如 link

但我想创建这样的查询:

Task::select('id')->groupBy('category_id')->count();

此代码仅返回第一个 category_id 的计数。但我想计算所有category_id

【问题讨论】:

    标签: php laravel group-by eloquent laravel-5.2


    【解决方案1】:

    您应该将计数添加到 select 函数并使用 get 函数执行查询。

    Task::select('id', \DB::raw("count(id)"))->groupBy('category_id')->get();
    

    \DB::raw() 函数确保在 Laravel 不修改其值的情况下将字符串插入到查询中。

    【讨论】:

    • \DB::raw("count(id)") 更改为 \DB::raw("count(id) as total_count") 对进一步操作会更有用。
    【解决方案2】:

    你可以这样做:

    return DB::table('offers')->select('*', DB::raw('count('.$field.') as total_count'))->groupBy($field)->get();
    

    【讨论】:

      【解决方案3】:

      更简单:

      Task::select('id')->groupBy('category_id')**->get()**->count();
      

      【讨论】:

        【解决方案4】:

        我在我的模型中覆盖了count() 方法。可能是这样的:

        public function count($string = '*'){
            $tempmodel = new YourModel();
            return $tempmodel ->where('id',$this->id)->where('category_id',$this->category_id)->count($string);
        }
        

        这正是我正在寻找的count() 的行为。

        【讨论】:

          【解决方案5】:

          Native Collection 替代方案(按 php 分组,而不是 mysql)。当您已将 Collection 作为变量分配时,这是一个不错的选择。当然在大多数情况下不如 mysql 分组优化。

          $tasks->groupBy('category_id')->map->count();
          

          【讨论】:

          【解决方案6】:

          为我工作

          我们需要选择一列,例如“category_id”或“user_id”,然后 在 get() 上计算选定的列

              Task::select('category_id')
                     ->where('user_id',Auth::user()->id)
                     ->groupBy(['category_id'])
                     ->get()
                     ->count();
          

          【讨论】:

          • 请考虑解释您为使其正常工作所做的更改
          【解决方案7】:

          这对我有用。

          输出:

          return $email_trackers = EmailTracker::get()->groupBy('campaign_id')->map->count();
               
          {
            "6": 2
          }
          

          【讨论】:

            猜你喜欢
            • 2013-09-03
            • 1970-01-01
            • 2020-12-03
            • 2022-01-21
            • 2016-02-18
            • 1970-01-01
            • 2017-07-23
            • 1970-01-01
            相关资源
            最近更新 更多