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

如何在Laravel中使用forelse与if语句构建符合需求的列表格

问题原因

你当前代码的问题是在内层直接遍历全局的$surveillances集合:

  • 当一个用户匹配到多条surveillance记录时,会生成多个多余的<td>,导致表格列错位
  • 如果用户没有匹配到记录,状态列会直接缺失,破坏表格结构

调整方案

我们把内层遍历逻辑替换为匹配当前用户对应的单条surveillance记录,保证每一行的列数固定,符合示例图的结构:

<tbody>
    @forelse ($kaders as $kader)
        <tr>
            <td>{{ $kader->username }}</td>
            @if($kader->status_user == '1')
                <td>Admin</td>
            @elseif($kader->status_user == '0')
                <td>Ibu / Guest</td>
            @endif
            {{-- 直接查找当前用户对应的surveillance记录,只生成1个td --}}
            @php
                $currentSurveillance = $surveillances->where('nik_ortu', $kader->username)->first();
            @endphp
            @if($currentSurveillance)
                @if($currentSurveillance->status == '1')
                    <td>Aktif</td>
                @else
                    <td>NonAktif</td>
                @endif
            @else
                <td>无记录</td> {{-- 这里可以替换成你需要的默认值,比如原来的admin --}}
            @endif
            <td class="text-center">
                <form onsubmit="return confirm('Apakah Anda Yakin ?');" action="{{ route('kader.destroy', $kader->id) }}" method="POST">
                    @method('DELETE')
                    @csrf
                    <a href="{{ route('kader.edit', $kader->id) }}" class="btn btn-sm btn-primary">
                        <i class="far fa-edit"></i> EDIT
                    </a>
                    <button type="submit" class="btn btn-sm btn-danger">
                        <i class="far fa-trash-alt"></i> HAPUS
                    </button>
                </form>
            </td>
        </tr>
    @empty
        <tr>
            <td colspan="4" class="text-center">
                <div class="alert alert-danger">
                    Data Kader belum Tersedia.
                </div>
            </td>
        </tr>
    @endforelse
</tbody>

额外优化说明

  • 原空数据状态的div直接放在tbody下不符合HTML规范,已经改成包裹在跨列的td中,避免页面渲染异常
  • 用Laravel Collection的where()->first()方法匹配记录,比嵌套循环效率更高,也不会出现多列的问题
  • 如果你的业务需要一个用户对应多条surveillance状态列,可以先在控制器中把所有surveillance的表头项整理好,再在每行按顺序匹配填充即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:09:03