Laravel框架下无Active状态房间数据时如何实现条件展示
实现方案
方案1:控制器预处理数据(推荐)
优先在控制器层完成数据筛选,避免在视图中处理集合逻辑,性能更高、代码职责更清晰:
// 对应控制器方法内的代码 public function dashboard() { // 提前筛选状态为Active的房间,最多取5条,再传递到视图 $activeDiklats = Diklat::where('status', 'Active')->take(5)->get(); return view('你的视图路径', compact('activeDiklats')); }
视图层直接使用Laravel Blade自带的@forelse指令,完美适配「有数据循环、无数据显示空提示」的场景:
<div class="card-body"> @forelse ($activeDiklats as $diklat_list) <!-- 存在活跃房间时展示的内容 --> <div class="transaction-item"> <a href="javascript:void(0)" class="text-dark"> <div class="media"> @php ($icons = ["bg-light-primary","bg-light-success","bg-light-danger","bg-light-warning", "bg-light-info"]) <div class="avatar {{$icons[$loop->index]}} rounded"> <div class="avatar-content"> <i data-feather="book" class="avatar-icon font-medium-3"></i> </div> </div> <div class="media-body ml-1"> <h6 class="transaction-title">{{$diklat_list->name}}</h6> <small>{{$diklat_list->userDiklat->where('is_approve',1)->count()}} peserta</small> </div> </div> </a> <div class="font-weight-bolder text-danger"></div> </div> @empty <!-- 无活跃房间时展示的提示区域 --> <div class="p-4 text-center"> <small class="font-italic centering-auto">当前暂无可用的活跃房间</small> </div> @endforelse </div>
方案2:视图内直接过滤(适合临时调试场景)
如果不方便修改控制器代码,可以直接在视图内完成集合过滤,注意你原代码中过滤条件写的是where('status', 'Aktif'),如果表中枚举字段的实际取值是Active,需要对应修改过滤值,否则会始终筛选不到数据:
<div class="card-body"> <!-- 先在视图内完成数据过滤 --> @php $activeDiklats = $diklats->where('status', 'Active')->take(5); @endphp @forelse ($activeDiklats as $diklat_list) <!-- 活跃房间展示内容和方案1一致,此处省略 --> @empty <!-- 空提示内容和方案1一致,此处省略 --> @endforelse </div>
@forelse是Laravel专门为这类场景设计的语法,不需要额外手动写@if($activeDiklats->isEmpty())的判断,语法更简洁直观。
内容的提问来源于stack exchange,提问作者Khairunnisa Syahfitri
相关产品推荐
相关产品推荐

