Laravel Blade模板:如何在@foreach中判断null并隐藏<li>元素
Laravel Blade中根据字段是否为null控制列表项显示的正确写法
针对你的需求,这里提供两种常见场景的解决方案,以及说明为什么你之前用isset和empty没生效:
场景1:整个<li id="step6">仅当数据集里存在非null的sixth_step时显示
如果你的需求是只要$dbQuery中有任意一条记录的sixth_step不为null,就显示这个列表项,否则隐藏,可以用集合的whereNotNull和isNotEmpty方法做判断:
@if($dbQuery->whereNotNull('sixth_step')->isNotEmpty()) <li id="step6"> <strong>Schritt 6<br> @foreach($dbQuery as $query) {{ $query->sixth_step }} @endforeach </strong> </li> @endif
场景2:每条记录对应一个列表项,仅当当前记录的sixth_step不为null时显示
如果你的原代码结构有误,实际是想为每条符合条件的记录生成一个列表项,可以把判断放在循环内部:
@foreach($dbQuery as $query) @if(!is_null($query->sixth_step)) <li id="step6-{{ $query->id }}"> <strong>Schritt 6<br>{{ $query->sixth_step }}</strong> </li> @endif @endforeach
为什么isset和empty没生效?
isset($query->sixth_step):这个函数判断的是变量是否存在且不为null,而你的字段是存在但值为null,所以isset会返回false,如果你的写法是@if(isset(...)),那null时确实不会显示,但如果你的需求是严格判断是否为null,is_null更直观。empty($query->sixth_step):这个函数会把null、空字符串、0、空数组等都视为“空”,如果你的sixth_step可能有合法的0或空字符串,empty会误判,所以不适合仅判断null的场景。
另外,你也可以用Laravel提供的filled()辅助函数,它会判断值不为null且不为空内容,适合需要同时排除空值的场景:
@if(filled($query->sixth_step)) <!-- 显示内容 --> @endif
内容的提问来源于stack exchange,提问作者Jessica Kimble
相关产品推荐
相关产品推荐

