为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel - 将数组转换回集合

Laravel - 将数组转换回集合

PHP
慕斯王 2021-06-30 17:57:41
只有当它们在产品表中时,我才试图获取类别的集合。我的类别表有 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);


查看完整回答
反对 回复 2021-07-09
?
慕少森

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();


查看完整回答
反对 回复 2021-07-09
  • 3 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信