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

使用Inner Join填充关联表列值及视图循环渲染问题

解决外键关联字段显示问题

方法一:使用Eloquent关联(推荐)

你已经在MasterModel中定义了与Fighter的belongsTo关联,直接利用这个关联就能轻松获取拳手名称,还能避免N+1查询问题,同时保留分页功能。

1. 修改MasterController的index方法

将原代码中的$master查询改为预加载关联:

public function index()
{
    // 预加载fighter关联,提升查询效率
    $master = MasterModel::with('fighter')->paginate(5);
    return view('master.master', compact('master'));
}

注:记得修正MasterModel中的属性名错误:protected $primary_key改为protected $primaryKey(Laravel要求驼峰命名)

2. 在Blade视图中渲染关联数据

在foreach循环里,直接通过关联对象获取拳手名称,同时处理无关联的情况避免报错:

@foreach ($master as $msf)
    <tr>
        <td> {{ $msf->id }} </td>
        <td> {{ $msf->name}} </td>  
        <td> {{ $msf->martial_art }} </td>  
        <td> {{ $msf->nacionality }} </td>  
        <td> {{ $msf->genre->value }} </td>
        <td> {{ $msf->height }} m</td>  
        <td> {{ $msf->weight }} kg</td>
        <!-- 显示关联的拳手名称,无关联时显示默认文本 -->
        <td> {{ $msf->fighter->name ?? '无关联拳手' }} </td>
        <td>
            <form action="{{ url("delete-master/$msf->id") }}" method="POST">
                <a href="{{ url("update-master/$msf->id") }}" class="btn btn-primary"><i class="fa fa-arrows-rotate"></i>&nbsp;Update</a>
                @csrf @method('DELETE')
                <x-primary-button class="ml-3"> {{ __('Delete') }} </x-primary-button>  
            </form>
       </td>  
   </tr>   
@endforeach

方法二:使用自定义Join查询

如果你坚持使用自己写的$fk查询,需要调整查询逻辑并修改视图循环对象:

1. 修改MasterController的index方法

给fighter.name起别名避免字段冲突,同时改为分页查询:

public function index()
{
    $fk = DB::table('master')
        ->join('fighter', 'fighter.id', '=', 'master.id_fighter')
        ->select(
            'master.id', 
            'master.name', 
            'master.martial_art', 
            'master.nacionality',
            'master.genre', 
            'master.height', 
            'master.weight', 
            'fighter.name as fighter_name' // 字段别名
        )
        ->paginate(5);
    return view('master.master', compact('fk'));
}

2. 在Blade视图中渲染Join结果

将循环对象改为$fk,并使用别名获取拳手名称:

@foreach ($fk as $msf)
    <tr>
        <td> {{ $msf->id }} </td>
        <td> {{ $msf->name}} </td>  
        <td> {{ $msf->martial_art }} </td>  
        <td> {{ $msf->nacionality }} </td>  
        <td> {{ $msf->genre->value }} </td>
        <td> {{ $msf->height }} m</td>  
        <td> {{ $msf->weight }} kg</td>
        <!-- 使用别名显示拳手名称 -->
        <td> {{ $msf->fighter_name }} </td>
        <td>
            <form action="{{ url("delete-master/$msf->id") }}" method="POST">
                <a href="{{ url("update-master/$msf->id") }}" class="btn btn-primary"><i class="fa fa-arrows-rotate"></i>&nbsp;Update</a>
                @csrf @method('DELETE')
                <x-primary-button class="ml-3"> {{ __('Delete') }} </x-primary-button>  
            </form>
       </td>  
   </tr>   
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:20:26