如何在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
相关产品推荐
相关产品推荐

