You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何统计列中不同ID的数量并关联展示?

解决Quiz游玩次数统计问题

我来帮你搞定这个统计需求~首先梳理下你的核心诉求:要在quizzes列表的Count列,展示每个Quiz在results表中的游玩次数,没被游玩过的Quiz(比如ID3)要显示0,当前的代码没法正确实现这个效果,我们来一步步修正。

问题分析

你当前的代码$countQuizPlayed = DB::table('results')->pluck('quiz_id')->groupby('quiz_id');得到的是一个分组集合(键为quiz_id,值是对应重复的quiz_id数组),而且视图里的@if($countQuizPlayed = $quiz->id)是赋值操作不是比较判断,既没法正确获取游玩次数,也处理不了未被游玩的Quiz(会显示空值而不是0)。

方案一:用Eloquent关联(最简洁推荐)

假设你已经定义了Quiz和Result模型,先在Quiz模型里建立一对多关联:

// app/Models/Quiz.php
class Quiz extends Model
{
    // ... 其他模型代码
    public function results()
    {
        return $this->hasMany(Result::class, 'quiz_id');
    }
}

然后在控制器查询allquizzes时,直接用withCount方法自动统计每个Quiz的关联游玩记录数:

// 控制器代码
$allquizzes = \App\Models\Quiz::withCount('results')->get();

最后在视图的Count列直接输出统计值即可,未被游玩的Quiz会自动显示0:

<td>{{ $quiz->results_count }}</td>

方案二:用Query Builder(无模型场景)

如果不想用Eloquent模型,也可以直接用DB查询构造器做左连接统计:

// 控制器代码
$allquizzes = DB::table('quizzes')
    ->leftJoin('results', 'quizzes.id', '=', 'results.quiz_id')
    ->select('quizzes.*', DB::raw('COUNT(results.id) as count_played'))
    ->groupBy('quizzes.id')
    ->get();

视图里对应输出统计字段:

<td>{{ $quiz->count_played }}</td>

最终视图示例(修正后)

你的quizzes表格可以改成这样:

<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Category</th>
<th>Count</th>
<th>Sub Category</th>
<th>Prepared By</th>
<th>Maximum Time</th>
<th>Played</th>
</tr>
</thead>
<tbody class="searchable">
@if(count($allquizzes)>0)
@foreach($allquizzes as $key=>$quiz)
<tr>
<td>{{$key+1}}</td>
<td>{{$quiz->qname}}</td>
<td>{{$quiz->description}}</td>
<td>{{ $quiz->results_count ?? $quiz->count_played }}</td> {{-- 根据你用的方案选对应字段 --}}
<td>{{$quiz->subcategory}}</td>
<td><a href="{{$quiz->profileUrl}}">{{$quiz->by}}</a></td>
<td>{{$quiz->minutes}}</td>
{{-- 补充你原来未写完的Played列代码即可 --}}
</tr>
@endforeach
@endif
</tbody>

这样就能完美实现需求:被游玩过的Quiz显示对应次数,未被游玩的显示0。

内容的提问来源于stack exchange,提问作者Daljit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:07:29