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
相关产品推荐
相关产品推荐

