首页 > 解决方案 > Foreach 查询产品

问题描述

我想要一个以 id 类别作为外键的产品列表,但我不想对每个产品进行查询,有没有更聪明的方法呢?当前代码有效,但我认为我做的不正确,请遵循代码:

        if($products){
            $categories = [];
            foreach($products as $product){
                $categories[] = $product->categories()->first();
            }
            return view('products',[
                'products' => $products,
                'categories' => $categories
            ]);
        }```


标签: phplaraveleloquent

解决方案


您可以使用 Eager loading 加载每个产品的类别,而无需遍历每个产品:

  1. 加载某个特定的所有类别$products
     if($products){
            $products->with('categories')->get();

            return view('products',$products);
        }
  1. $products加载具有额外约束的特定类别:
     if($products){
            $products->with(['categories' => function ($query) {
            $query->where('...');
            }])->get();;

            return view('products',$products);
        }

推荐阅读