I want to count all review products in Magento 2 like :
There are 5 reviews 1 star
There are 3 reviews 2 star ....
Pls Help me, Thanks
I want to count all review products in Magento 2 like :
There are 5 reviews 1 star
There are 3 reviews 2 star ....
Pls Help me, Thanks
You can use below code
<?php
$productId = 'your_product_id';
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$reviewFactory = $objectManager->create('Magento\Review\Model\Review');
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$storeManager = $objectManager->create('\Magento\Store\Model\StoreManagerInterface');
$storeId = $storeManager->getStore()->getStoreId();
$reviewFactory->getEntitySummary($product, $storeId);
$ratingSummary = $product->getRatingSummary()->getRatingSummary();
$reviewCount = $product->getRatingSummary()->getReviewsCount();
?>
<?php if($ratingSummary){ ?>
<div class="product-reviews-summary short">
<div class="rating-summary">
<div title="<?php echo (int)$ratingSummary; ?>%" class="rating-result">
<span style="width:<?php echo (int)$ratingSummary; ?>%"><span><?php echo (int)$ratingSummary; ?>%</span></span>
</div>
</div>
<div class="reviews-actions">
<?php echo __('('.$reviewCount.') Reviews'); ?>
</div>
</div>
<?php } ?>
Note Don't use objectmanager. It's not good practice.
You have to create and call this method with your product ID. Also make sure you have only 1 rating option in admin.
public function getAllStart($pid) {
$review = $this->_objectReview->getCollection() //\Magento\Review\Model\Review $reviewFactory (_objectReview)
->addFieldToFilter('main_table.status_id', 1)
->addEntityFilter('product', $pid) //$pid = > your current product ID
->addStoreFilter($this->_storeManager->getStore()->getId())
->addFieldToSelect('review_id')
;
$review->getSelect()->columns('detail.detail_id')->joinInner(
['vote' => $review->getTable('rating_option_vote')], 'main_table.review_id = vote.review_id', array('review_value' => 'vote.value')
);
$review->getSelect()->order('review_value DESC');
$review->getSelect()->columns('count(vote.vote_id) as total_vote')->group('review_value');
for ($i = 5; $i >= 1; $i--) {
$arrRatings[$i]['value'] = 0;
}
foreach ($review as $_result) {
$arrRatings[$_result['review_value']]['value'] = $_result['total_vote'];
}
return $arrRatings;
}
Note: it's not work if the site have multiple criterias ratings.