只有当它们在产品表中时,我才试图获取类别的集合。我的类别表有 300 个项目。如果产品表中附加了一个类别,我只想要一个集合。$categories 集合应该只产生大约 10 个类别,因为只有大约 10 个产品具有不同的 category_ids$products = DB::table('products')->groupBy('category_id')->get();foreach($products as $product){ $categories[] = DB::table('categories')->where('id', '=', $product->category_id)->first();}$categories = collect($categories)->all();也许我正在解决这个错误,应该使用不同的查询构建器方法?最终结果 $categories 确实得到了我想要的结果,但在我的刀片中,我得到了“试图获取非对象的属性”错误。
3 回答
精慕HU
TA贡献1845条经验 获得超8个赞
如果$categories
在您的刀片文件中用作集合,则需要删除该->all()
方法。
->all()
在创建集合后将集合转换为数组:
$categories = collect($categories);
慕少森
TA贡献2019条经验 获得超9个赞
这可以通过一个简单的雄辩查询来完成。除非您正在做一些过于复杂的事情(在我看来),否则无需使用查询构建器。
whereHas() 只会返回包含产品的类别。
Categories::with('products')->whereHas('products')->get();
只要模型上的关系正确,以上就是您要寻找的。正如评论中指出的那样,您需要模型和关系。Laravel 使用 MVC 模式,第一个字母代表模型,所以我猜你正在使用它们。如果不让我知道,我可以帮助设置它们,因为您应该使用它们。
如果您需要使用查询构建器,请清理该代码并使用类似的东西,这样您就不必担心回忆了。另请查看hydrate()将这些通用类实例更改为Categories模型实例的方法。
DB::table('categories')->whereIn('id', function($q){
$q->select('category_id')->from('products');
})->get();
- 3 回答
- 0 关注
- 214 浏览
添加回答
举报
0/150
提交
取消