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

Laravel多表查询使用表别名时如何正确显示主客队名称

代码修正方案

你现有代码存在拼写错误、别名缺失、变量未定义、模板属性调用错误四类问题,按以下方式调整即可正常展示主客队名称与比赛结果:

修正原生SQL脚本

原SQL存在表名拼写错误(mattch/mtach为match笔误)、末尾多余反引号问题,且match是MySQL保留字,需要用反引号包裹避免语法报错,修正后代码:

select `match`.ID, `match`.ht_ID, ht.Name as ht_Name, `match`.at_ID, at.Name as at_Name, match_results.Results 
from match_results
join `match` on `match`.ID = match_results.Match_ID 
join teams ht on `match`.ht_ID = ht.ID
join teams at on `match`.at_ID = at.ID

修正Laravel控制器查询逻辑

原控制器代码存在三个核心问题:

  • 表名写错:查询的结果表是match_results而非results
  • select字段语法错误:ht.Name前缺失单引号,且未给主客队名称字段设置别名,无法在模板中直接区分
  • 查询结果未赋值给$result变量,会触发未定义变量报错
    修正后代码:
$result = DB::table('match_results')
    ->select(
        'match.ID',
        'ht.Name as ht_Name',
        'at.Name as at_Name',
        'match_results.Results'
    )
    ->join('match', 'match.ID', '=', 'match_results.Match_ID')
    ->join('teams as ht', 'match.ht_ID', '=', 'ht.ID')
    ->join('teams as at', 'match.at_ID', '=', 'at.ID')
    ->get();

return view('results', ['result' => $result]);

修正Blade模板代码

使用DB门面查询返回的是扁平化的标准对象,不存在嵌套的ht/at模型对象,不能使用$results->ht.Name的嵌套调用写法;同时原模板中比赛结果字段拼写错误(Rezultats为笔误),修正后代码:

@foreach($result as $results)
<tr>
    <td>{{ $results->ID }}</td>
    <td>{{ $results->ht_Name }}</td>
    <td>{{ $results->at_Name }}</td>
    <td>{{ $results->Results }}</td>
</tr>
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:36:25