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

Laravel中如何根据专业ID显示专业名称?

解决学生列表显示专业ID而非专业名称的问题

问题说明

学生列表的专业列目前直接显示专业ID,需通过关联专业表,根据ID展示对应的专业名称。

现有代码回顾

Model(Mahasiswa.php)

public function prodi()
{
    return $this->belongsTo(Prodi::class, 'prodi');
}

public function toSearchableArray(): array
{
    return [
        'nama' => $this->nama,
        'nim' => $this->nim,
    ];
}

Controller(MahasiswaController.php)

public function index(Request $request)
{
    if ($request->keyword) {
        $mahasiswa = Mahasiswa::where('is_delete', null)->search($request->keyword)->paginate(PHP_INT_MAX);
    } else {
        $mahasiswa = Mahasiswa::where('is_delete', null)->paginate(PHP_INT_MAX);
    }

    return view('mahasiswa.daftar_mahasiswa', compact('mahasiswa'));
}

// 其余方法完整代码见问题描述

View(daftar_mahasiswa.blade.php)

<tbody>
    @foreach ($mahasiswa as $mhs)
        <tr>
            <td>{{ $loop->iteration }}</td>
            <td>{{ $mhs->nama }}</td>
            <td>{{ $mhs->nim }}</td>
            <td>{{ $mhs->prodi }}</td> <!-- 当前显示专业ID -->
            <td>{{ $mhs->j_kel }}</td>
            <!-- 操作按钮代码省略 -->
        </tr>
    @endforeach
</tbody>

修改步骤

1. 优化Model关联(可选但推荐)

当前关联方法名prodi()与数据库字段名prodi重名,易造成混淆,建议修改关联方法名避免冲突:

// Mahasiswa.php
public function prodiData()
{
    return $this->belongsTo(Prodi::class, 'prodi');
}

若不修改方法名,后续需通过->prodi->字段名访问关联模型属性,而非直接访问字段。

2. Controller预加载关联数据(避免N+1查询)

在查询学生数据时,通过with()预加载专业关联,提升页面性能:

// MahasiswaController.php - index方法
public function index(Request $request)
{
    $query = Mahasiswa::where('is_delete', null);
    
    if ($request->keyword) {
        $mahasiswa = $query->search($request->keyword)->with('prodi')->paginate(PHP_INT_MAX);
    } else {
        $mahasiswa = $query->with('prodi')->paginate(PHP_INT_MAX);
    }

    return view('mahasiswa.daftar_mahasiswa', compact('mahasiswa'));
}

// 同步更新show和exportpdf方法的查询逻辑
public function show($id)
{
    return view('mahasiswa.daftar_mahasiswa-detail', [
        'mahasiswa' => Mahasiswa::with('prodi')->findOrFail($id),
    ]);
}

public function exportpdf()
{
    $datas = Mahasiswa::with('prodi')->get();
    $pdf = Pdf::loadView('mahasiswa.pdf', ['datas' => $datas]);

    return $pdf->download('Data Mahasiswa -' . Carbon::now()->format('Y-m-d') . '.pdf');
}

3. View模板修改为显示专业名称

将显示专业ID的代码,改为访问关联模型的专业名称字段(假设Prodi模型中专业名称字段为nama,请根据实际字段名调整):

<!-- daftar_mahasiswa.blade.php -->
<td>{{ $mhs->prodi->nama ?? '未关联专业' }}</td>

添加?? '未关联专业'是为了处理专业ID无效或未关联的异常情况,避免页面报错。

4. 修复Update方法的字段遗漏(可选)

当前update方法未处理专业字段的更新,若需支持修改学生专业,补充以下代码:

public function update(Request $request, $id)
{
    $mahasiswa = Mahasiswa::find($id);

    $mahasiswa->update([
        'nim' => $request->get('nim'),
        'nama' => $request->get('nama'),
        'j_kel' => $request->get('j_kel'),
        'prodi' => $request->get('prodi') // 新增专业字段更新逻辑
    ]);

    Alert::success('Berhasil 🎉🥳', 'Berhasil mengubah data mahasiswa');
    return redirect()->route('mahasiswa.index');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:39:52