我想优化产品列表的 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.'%');});
目前我正在使用子查询方法来获取结果,但我认为它没有优化,因为相同的搜索查询被多次执行。
请建议。
谢谢。