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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:50:19