Attention: pas testé.
Source: Magento 2 product count by attribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
protected $_productCollectionFactory; protected $attributFactory; protected $eavConfig; public function __construct( \Magento\Catalog\Model\ResourceModel\Product $productFactory, \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attributFactory, \Magento\Eav\Model\Config $eavConfig ) { $this->eavConfig = $eavConfig; $this->attributFactory = $attributFactory; $this->_productCollectionFactory = $productFactory; } public function getProductCountByAttributeCode() { $attributeCode = ‘you_attribute_code’; $attribute = $this->eavConfig->getAttribute('catalog_product', $attributeCode); $attributFactory = $this->attributFactory->create()->setStoreFilter(0, false); $itemCollection = $this->_productCollectionFactory; $attributFactory->getSelect() ->joinLeft( array('value_table' => $itemCollection->getTable('catalog_product_entity_int')), 'main_table.option_id=value_table.value AND main_table.attribute_id=value_table.attribute_id', 'entity_id') ->reset(\Zend_Db_Select::COLUMNS) ->columns(array('main_table.option_id',new \Zend_Db_Expr('COUNT(value_table.entity_id)'))) ->where('main_table.attribute_id=:attribute_id') ->group('main_table.option_id'); $result = $itemCollection->getConnection()->fetchPairs( $attributFactory->getSelect(), array('attribute_id' => $attribute->getId())); return $result; } |