From 87dc1c1284b1acc07277f6ace120846bb400a6be Mon Sep 17 00:00:00 2001 From: Abdelrhman Gamal Date: Thu, 26 May 2022 11:07:23 +0200 Subject: [PATCH] Optimze Get Gategory Product Attribute function , Specially for large number for product. --- .../src/Repositories/ProductFlatRepository.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php b/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php index 566b5dae2..64e3d8aeb 100644 --- a/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductFlatRepository.php @@ -76,14 +76,7 @@ class ProductFlatRepository extends Repository { $qb = $this->categoryProductQuerybuilder($categoryId); - $productFlatIds = $qb->pluck('id')->toArray(); - $productIds = $qb->pluck('product_flat.product_id')->toArray(); - - $childProductIds = $this->model->distinct() - ->whereIn('parent_id', $productFlatIds) - ->pluck('product_id')->toArray(); - - $productIds = array_merge($productIds, $childProductIds); + $childQuery = $this->model->distinct()->whereIn('parent_id', $qb->distinct()->select(['id'])); $attributeValues = $this->model ->distinct() @@ -92,7 +85,10 @@ class ProductFlatRepository extends Repository ->leftJoin('product_super_attributes as ps', 'product_flat.product_id', 'ps.product_id') ->select('pa.integer_value', 'pa.text_value', 'pa.attribute_id', 'ps.attribute_id as attributeId') ->where('is_filterable', 1) - ->WhereIn('pa.product_id', $productIds) + ->where(function ($query) use ($qb,$childQuery){ + $query->WhereIn('pa.product_id', $qb->distinct()->select(['product_flat.product_id'])); + $query->orWhereIn('pa.product_id', $childQuery->select(['product_flat.product_id'])); + }) ->get(); $attributeInfo['attributeOptions'] = $attributeInfo['attributes'] = [];