1

我想优化产品列表的 Laravel 查询。我需要显示产品列表和品牌。以下是代码:

$searchTerm = 'Coffee';
$productListing = Product::where('title', 'like', '%'.$searchTerm.'%')->paginate(10);

对于搜索返回的产品,我还需要所有品牌的单独列表。

方法一:

获取数组中的所有品牌 ID

$productBrandsArray = $productListing->pluck('brand_id')->toArray();

问题是由于产品分页,这只会获得 10 条记录的品牌

$productBrands = Brand::whereIn('brand_id', $productBrandsArray);

方法二(子查询):

$productBrands = Brand::whereIn('brand_id', function ($query) use($searchTerm) {
$query->select('brand_id')
->from(with(new Product())->getTable())
->where(Product::getTableName().'.title', 'like', '%'.$searchTerm.'%');});

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

请建议。

谢谢。

4

1 回答 1

1

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

$productBrands = Brand::where('products.title', 'like', '%' . $searchTerm . '%')
                ->join("products", "brands.brand_id", "=", "products.brand_id")
                ->get();
于 2017-05-09T13:33:26.423 回答