You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel通过Filter模型取关联分类名报LengthAwarePaginator::$category未定义如何解决

错误原因

你抛出该错误的核心原因是 Blade模板中遍历对象错误:
控制器返回的$filters是LengthAwarePaginator分页实例,并非单个Filter模型对象,直接访问$filters->category相当于试图从分页器实例上读取不存在的category属性,因此触发报错。

你的控制器和模型关联定义逻辑都是正确的,仅需要调整Blade模板的遍历逻辑即可。


修复方案

  1. 调整Blade模板的遍历逻辑,直接遍历$filters分页集合中的每一个filter模型实例
  2. 需要展示关联分类名称的位置,通过单条$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:54:04