Question

I want to display ratings on the product page like this:

enter image description here

  1. How many users selected 5/4/3/2/1 star ratings
  2. The average rating, displayed as stars
  3. Percentage of users selected a 5 star rating

I need to add custom code for that, so please don't suggest getReviewsSummaryHtml.

Was it helpful?

Solution

Create and call this new method with product ID. Also make sure you have only 1 rating option enable 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;
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top