我想针对产品列表优化Laravel查询。我需要展示产品列表以及品牌。以下是代码:
magick wolf.jpg -scale 310x496\! \
\( +clone -flip -crop "x%[fx:h/4]+0+0\!" -alpha set -channel A -fx "0.8-(0.6*j)/h" \) -append result.png
我还需要针对搜索返回的产品的所有品牌单独列表。
方法1:
获取阵列中的所有品牌ID
$searchTerm = 'Coffee';
$productListing = Product::where('title', 'like', '%'.$searchTerm.'%')->paginate(10);
问题是,由于产品分页,这只能获得10条记录的品牌
$productBrandsArray = $productListing->pluck('brand_id')->toArray();
方法2(子查询):
$productBrands = Brand::whereIn('brand_id', $productBrandsArray);
目前我使用子查询方法来获取结果,但我认为它没有优化,因为同一搜索查询被多次执行。
请建议。
感谢。
答案 0 :(得分:1)
分页是在限制和偏移的基础上工作的,因此您必须进行第二次查询才能获得整个品牌。在获取产品品牌的方法1中,您可以更改下面给出的查询,这样您就不需要单独获取品牌ID。
$productBrands = Brand::where('products.title', 'like', '%' . $searchTerm . '%')
->join("products", "brands.brand_id", "=", "products.brand_id")
->get();