Laravel通过Filter模型取关联分类名报LengthAwarePaginator::$category未定义如何解决
错误原因
你抛出该错误的核心原因是 Blade模板中遍历对象错误:
控制器返回的$filters是LengthAwarePaginator分页实例,并非单个Filter模型对象,直接访问$filters->category相当于试图从分页器实例上读取不存在的category属性,因此触发报错。
你的控制器和模型关联定义逻辑都是正确的,仅需要调整Blade模板的遍历逻辑即可。
修复方案
- 调整Blade模板的遍历逻辑,直接遍历
$filters分页集合中的每一个filter模型实例 - 需要展示关联分类名称的位置,通过单条
$filter模型的关联属性category读取分类字段,同时做好关联为空的兼容处理,避免后续分类被删除后页面报错。
修正后的index.blade.php完整代码如下:
@foreach($filters as $filter) <tr> <td>{{ $filter->id }}</td> <td>{{ $filter->name }}</td> <!-- 展示关联分类名称,optional方法兼容分类不存在的场景 --> <td>{{ optional($filter->category)->name ?? '未关联分类' }}</td> <td> <div class="btn-group btn-group-sm"> <a href="{{ route('filters.edit', $filter->id) }}" class="btn btn-primary">edit</a> <button type="button" class="btn btn-danger" data-action="{{ route('filters.destroy', $filter->id) }}" data-bs-toggle="modal" data-bs-target="#deleteFilter" onclick="loadDeleteModal(`{{ $filter->name }}`)" data-id="{{ $filter->id }}">remove</button> </div> </td> </tr> @endforeach
补充说明:如果你的项目运行Laravel 8及以上版本,分类名称展示也可以简写为
{{ $filter->category?->name ?? '未关联分类' }},和optional方法效果一致。
内容的提问来源于stack exchange,提问作者user17236681
相关产品推荐
相关产品推荐

