删除关联分类后Items表外键为null,视图报错‘Attempt to read property on null’求解
解决外键为null时的视图渲染错误
你的代码存在两个关键问题导致报错:
- Blade模板的
@if条件里不需要用{{}}包裹变量,{{}}是用来输出内容的,直接写变量判断即可 - 判断逻辑错误:当
$item->category本身是null时,直接访问$item->category->category_name会直接抛出错误,根本走不到判断category_name是否为'null'的步骤
下面是几种可行的修复方案:
方案1:使用Blade的@isset指令
@isset($item->category) {{ $item->category->category_name }} @else <h2>no category</h2> @endisset
@isset会先检查$item->category是否存在且不为null,只有满足条件才会执行输出分类名的逻辑。
方案2:直接判断category是否存在
@if($item->category) {{ $item->category->category_name }} @else <h2>no category</h2> @endif
在布尔判断中,null会被视为false,这个判断能有效避免null调用属性的错误。
方案3:PHP8+可选链+空合并运算符(最简洁)
{{ $item->category?->category_name ?? 'no category' }}
?->是可选链操作符,当$item->category为null时会直接返回null,不会继续访问category_name;??是空合并运算符,当左边的值为null时,会使用右边的默认值。
内容的提问来源于stack exchange,提问作者jancalimbo
相关产品推荐
相关产品推荐

