Laravel组然后返回一个计数最高的结果

时间:2019-01-12 15:02:12

标签: php laravel max

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

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

因此,这给了我按description_id分组的结果。不确定我走的路是否正确,但不确定从这里出发。或者,如果有更合适的方法可以做到这一点。任何可以引导我朝正确方向发展的东西都会受到赞赏。

3 个答案:

答案 0 :(得分:3)

您可以尝试这种方式:

$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();

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

答案 1 :(得分:2)

如果我理解正确,我认为以下方法应该起作用:

DB::table('expenses')
    ->where('user_id', auth()->user()->id)
    ->groupBy('description_id')
    ->orderByRaw('count(*) DESC')
    ->value('description_id')
    ->first();

这将返回最受欢迎费用的description_id

答案 2 :(得分:2)

假设您在expenses模型中建立了Description关系,并且在user模型中建立了Expense关系,则可以执行以下操作:

$description = Description::withCount([
    'expenses' => function ($query) {
        $query->where('user_id', auth()->id());
    }])
    ->orderBy('expenses_count', 'desc')
    ->first();