Laravel 5.4 Eloquent查询优化

时间:2017-05-09 09:32:34

标签: php mysql laravel optimization eloquera

我想针对产品列表优化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);

目前我使用子查询方法来获取结果,但我认为它没有优化,因为同一搜索查询被多次执行。

请建议。

感谢。

1 个答案:

答案 0 :(得分:1)

分页是在限制和偏移的基础上工作的,因此您必须进行第二次查询才能获得整个品牌。在获取产品品牌的方法1中,您可以更改下面给出的查询,这样您就不需要单独获取品牌ID。

$productBrands = Brand::where('products.title', 'like', '%' . $searchTerm . '%')
                ->join("products", "brands.brand_id", "=", "products.brand_id")
                ->get();