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

Laravel中按条件查询分类表并按ID降序排序的报错解决咨询

Laravel中按条件查询分类表并按ID降序排序的报错解决咨询

嗨,我来帮你排查这个问题~

你遇到的「Attempt to read property "category_name" on array」报错,核心原因是你现在只创建了查询构建器实例,还没有真正执行数据库查询获取数据!

看你当前的代码:

public function category() { 
    $category = Category::where('status', 'true'); 
    return view('admin.services.category', compact('category')); 
}

这里的Category::where(...)只是构建了查询语句,并没有发送请求到数据库拉取数据,所以$category不是包含分类数据的集合/模型,而是一个查询构建器对象,在视图里直接访问->category_name自然会报错。

接下来给你两种正确的写法,都能实现「筛选status为true的分类+按ID降序排序」的需求:

方法一:链式调用查询方法并执行

public function category() { 
    // 加上orderBy指定降序,再用get()执行查询,拿到符合条件的分类集合
    $categories = Category::where('status', 'true')
                          ->orderBy('id', 'desc')
                          ->get(); 
    return view('admin.services.category', compact('categories')); 
}

这里我把变量名改成了$categories(复数更语义化,因为返回的是多个分类的集合),orderBy('id', 'desc')就是按ID降序排序,get()方法会执行查询并返回Collection集合。

方法二:布尔类型字段的严谨写法(可选优化)

如果你的status字段在数据库里是布尔类型(比如tinyint(1)),建议直接用布尔值true而非字符串'true',匹配更准确:

$categories = Category::where('status', true)
                      ->orderBy('id', 'desc')
                      ->get();

视图中的正确使用示例

假设你要在视图里循环展示分类数据,写法如下:

@foreach($categories as $category)
    <div class="category-item">
        <p>ID: {{ $category->id }}</p>
        <p>分类名称: {{ $category->category_name }}</p>
        <p>状态: {{ $category->status ? '启用' : '禁用' }}</p>
    </div>
@endforeach

这样就能正确访问每个分类模型的属性了。

总结一下:查询构建器的where、orderBy等方法只是用来拼接SQL语句,必须通过get()、first()、find()这类方法触发查询,才能拿到可以直接访问属性的模型/集合对象~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 10:50:27