0

I am using below script to desc order price collection but it's not working.

This collection is working for a simple product but configurable products not working:

    $productsCollection->addFinalPrice()->addMinimalPrice()->addAttributeToSort('price',"desc");
                        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
foreach ($productsCollection as $product) {
                /*print_r($product->getData());*/
                $productModel = $objectManager->create('Magento\Catalog\Model\Product');
                $product = $productModel->load($product->getEntityId());
                $attributeOptions = [];
                $getChildId = [];
                $configurable = [];
                $attributeVariant = '';
                if($product->getTypeId() != 'simple' && $product->getTypeId() != 'virtual') {
                    /*if(!$product Instanceof \Magento\Catalog\Model\Product){
                        continue;
                    }*/
                    $productAttributeOptions = $product->getTypeInstance(true)->getConfigurableAttributesAsArray($product);
                    foreach ($productAttributeOptions as $productAttribute) {
                        $configurable[] = ['id' => $productAttribute['id'],
                                'value' => $productAttribute['label']];
                        $attributeVariant = $productAttribute['label'];
                        foreach ($productAttribute['values'] as $attribute) {
                            $attributeOptions[$productAttribute['label']][] = [
                                    'id' => $attribute['value_index'],
                                    'value' => $attribute['store_label']];
                        }
                        $_configChild = $product->getTypeInstance()->getUsedProducts($product);

                        $attributeCode = $productAttribute['attribute_code'];
                        foreach ($_configChild as $child) {
                            /*print_r($child->getData());*/
                            $originalPrice = $child->getPrice() == '' ? 0 : $child->getPrice();
                            $finalPrice = $child->getSpecialPrice() == '' ? 0 : $child->getSpecialPrice();
                            $percentage = 0;
                            if ($originalPrice > $finalPrice) {
                                $percentage = number_format(($originalPrice - $finalPrice) * 100 / $originalPrice,0);
                            }
                            $quantityChild = $this->stockManagerInterface->getStockQty($child->getId(), $child->getStore()->getWebsiteId());
                            $getChildId[] = ['id' => $child->getId(),
                                    'sku' => $child->getSku(),
                                    'name' => $child->getName(),
                                    'quantity' => $quantityChild == '' ? 0 : $quantityChild,
                                    'base_price' => $child->getPrice() == '' ? 0 : $child->getPrice(),
                                    'price' => $child->getFinalPrice() == '' ? 0 : $child->getFinalPrice(),
                                    'attribute_code' => $child->getData($attributeCode) == '' ? '' : $child->getData($attributeCode),
                                    'image' => $this->getMediaUrl()."catalog/product".$child->getImage(),
                                    'url' => $child->getProductUrl(),
                                    'discount' => $percentage
                                ];
                            }
                        }
                    }
                    $quantity =  (int)$this->stockManagerInterface->getStockQty($product->getId(), 1);
                    $outOfStock =  $product->getData('is_in_stock');
                    if($product->getTypeId() == 'simple'  ||  ($product->getTypeId() == 'configurable'  && count($getChildId) > 0)) {
                        $originalPrice = $product->getPrice() == '' ? 0 : $product->getPrice();
                        $finalPrice = $product->getSpecialPrice() == '' ? 0 : $product->getSpecialPrice();
                        $percentage = 0;
                        if ($originalPrice > $finalPrice) {
                            $percentage = number_format(($originalPrice - $finalPrice) * 100 / $originalPrice,0);
                        }
                        $currentProduct = ['id' => $product->getId(),
                            'sku' => $product->getSku(),
                            'name' => $product->getName(),
                            'configurable-options' => $configurable,
                            'attribute-variant' => $attributeVariant,
                            'quantity' => $quantity>0 ? $quantity : 0,
                            'base_price' => $product->getPrice() == '' ? 0 : $product->getPrice(),
                            'price' => $product->getFinalPrice() == '' ? 0 : $product->getFinalPrice(),
                            'outof-stock' => $outOfStock,
                            'type' => $product->getTypeId(),
                            'attribute' => (object)$attributeOptions,
                            'image' => $this->getMediaUrl()."catalog/product".$product->getImage(),
                            'url' => $product->getProductUrl(),
                            'child' => ($getChildId),
                            'pagination' => ceil($productsCollection->getSize() / 20),
                            'discount' => $percentage
                        ];
                        $categoriesArrays[$i] = $currentProduct;

                        $i++;
                    }
                }

If it's not an asc or desc what is the problem here?

  • Works fine for me ordering the collection by price. – Nikolas Nov 24 '17 at 9:49
  • Check my updated question – Magento 2 Nov 24 '17 at 9:50
  • got any solution for this issue? i have the same problem that the price sorting is not properly working for the configurable products. – amesh Dec 12 '18 at 8:02
0

For Me below code works fine

 $productsCollection->setOrder('price','ASC'); //DESC for decending 
  • I tried this also simple product is working but not configurable product – Magento 2 Nov 24 '17 at 10:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.