diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php index 97aa2c49e9929..26abef4d97350 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tab/Product.php @@ -17,6 +17,7 @@ use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ProductFactory; +use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory; use Magento\Framework\App\ObjectManager; use Magento\Framework\Registry; @@ -42,6 +43,8 @@ class Product extends Extended */ private $visibility; + private ProductCollectionFactory $productCollectionFactory; + /** * @param Context $context * @param Data $backendHelper @@ -50,6 +53,7 @@ class Product extends Extended * @param array $data * @param Visibility|null $visibility * @param Status|null $status + * @param ProductCollectionFactory|null $productCollectionFactory */ public function __construct( Context $context, @@ -58,12 +62,16 @@ public function __construct( Registry $coreRegistry, array $data = [], Visibility $visibility = null, - Status $status = null + Status $status = null, + ProductCollectionFactory $productCollectionFactory = null ) { $this->_productFactory = $productFactory; $this->_coreRegistry = $coreRegistry; $this->visibility = $visibility ?: ObjectManager::getInstance()->get(Visibility::class); $this->status = $status ?: ObjectManager::getInstance()->get(Status::class); + $this->productCollectionFactory = $productCollectionFactory ?: ObjectManager::getInstance()->get( + ProductCollectionFactory::class + ); parent::__construct($context, $backendHelper, $data); } @@ -125,18 +133,22 @@ protected function _prepareCollection() if ($this->getCategory()->getId()) { $this->setDefaultFilter(['in_category' => 1]); } - - $collection = $this->_productFactory->create()->getCollection()->addAttributeToSelect( - 'name' - )->addAttributeToSelect( - 'sku' - )->addAttributeToSelect( - 'visibility' - )->addAttributeToSelect( - 'status' - )->addAttributeToSelect( - 'price' - )->joinField( + $collection = $this->productCollectionFactory->create(); + $storeId = (int)$this->getRequest()->getParam('store', 0); + if ($storeId > 0) { + $collection->addStoreFilter($storeId); + } + $collection->addAttributeToSelect( + [ + 'name', + 'sku', + 'visibility', + 'status', + 'price' + ], + 'left' + ); + $collection->joinField( 'position', 'catalog_category_product', 'position', @@ -144,12 +156,7 @@ protected function _prepareCollection() 'category_id=' . (int)$this->getRequest()->getParam('id', 0), 'left' ); - $storeId = (int)$this->getRequest()->getParam('store', 0); - $collection->setStoreId($storeId); - if ($storeId > 0) { - $collection->addStoreFilter($storeId); - } - + $collection->getSelect()->group('e.entity_id'); $this->setCollection($collection); if ($this->getCategory()->getProductsReadonly()) {