Laravel Blade中如何获取指定赛事的所有关联得分数据?
问题根源与解决方案
核心问题是模型关联关系定义错误:一场赛事对应多条球员得分记录,这是一对多关系,但你误用了表示多对一的belongsTo关联,导致只能获取单条关联数据。
1. 修正模型关联关系
修改Matchh模型的关联方法,将belongsTo改为hasMany(一对多关联),同时建议将方法名改为复数scores以符合语义规范:
// app/Models/Matchh.php public function scores(){ // 参数说明:关联模型、关联表的外键(scores.match_id)、当前模型主键(matchhs.id) return $this->hasMany(Score::class, 'match_id', 'id'); }
2. 调整控制器查询(可选,优化规范)
保持原有查询逻辑即可,建议将变量名改为更语义化的match,并使用firstOrFail()避免空数据报错:
public function cricketMatchScoreStatus($id) { $match = Matchh::with('scores')->where('id', $id)->firstOrFail(); return view('public.match_score_status', compact('match')); }
3. Blade视图遍历展示所有得分数据
在视图中通过关联关系遍历所有球员得分记录:
<!-- resources/views/public/match_score_status.blade.php --> <h2>赛事:{{ $match->title }}</h2> <!-- 假设matchhs表有title字段 --> <div class="score-list"> <h3>球员得分记录</h3> @foreach($match->scores as $score) <p>球员姓名:{{ $score->player_name }} | 得分:{{ $score->points }}</p> <!-- 根据你的scores表字段调整输出内容 --> @endforeach </div>
为什么之前的尝试无效?
- 使用
get()查询:虽然返回了集合,但关联关系本身定义错误,依然只能拿到单条得分数据;且单场赛事用first()更合理。 - DB左连接查询:会返回多条重复的赛事数据(每条得分对应一条赛事记录),需要手动去重或遍历,但不如Eloquent关联的结构化数据易用。
内容的提问来源于stack exchange,提问作者Abdullah Al Shahed
相关产品推荐
相关产品推荐

