php - Laravel groupBy 然后返回一个计数最高的结果

标签 php laravel max

我有一个 expenses 表,它与 Descriptions 有一个 belongsTo 关系。我只想返回最常使用的描述实例。我的想法是,抓取使用最多的description_id,然后使用id从数据库中抓取相应的Description。到目前为止,我想出了这个:

auth()->user()->expenses()->get()->groupBy('description_id');

所以这给了我按 description_id 分组的结果。不确定我是否在正确的轨道上,但不确定从这里去哪里。或者是否有更合适的方法来实现这一点。任何可以引导我走向正确方向的东西都将不胜感激。

最佳答案

你可以这样试试:

$userWithExpensesWithMaxDescription = auth()->user()->expenses()->with(['descriptions' => function ($query) {
    // subquery to get only max count
    $query->select('description_id', DB::raw('count(*) as total'))
        ->groupBy('description_id')
        ->orderBy('total', 'DESC')
        ->first();
}])->get();

我想您的 Expenses 模型中有关系 descriptions

关于php - Laravel groupBy 然后返回一个计数最高的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54160792/

相关文章:

javascript - Laravel 5.0 : How to save multiple inputs of rows in the same column of database?

php - 尝试使用 laravel css3 和 bootstrap 覆盖图像

php - Laravel 8 : Array to string conversion while calling route:list

amazon-web-services - 如何使用亚马逊 MWS API 设置产品的最低和最高价格

mysql - 更新 MySQL 表,但只查询最大值

php - 处理多个主机上的 PHP 站点 session 的最佳方法是什么?

php - 没有收到来自驱动器的 Webhook 通知,为什么?

php - 根据sql表编号更改单元格的背景颜色

Laravel 4 - 多对多 - 数据透视表不更新

mysql - 在 groupby 期间聚合满足条件的列的部分部分