0

I am trying to programmatically create a product review for an existing product in Magento 2.

4

Note: Here i am giving u sample example on creating review and rating programmatically by using test script running at root folder of magento2

<?php
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');

ini_set('display_errors', 1);
echo "HELLO STACK EXCHANGE";


$productId=5;
$customerId=13; //for Guest user $customerId=Null;
$customerNickName='STACK EXCHANGE';
$reviewTitle='STACK EXCHANGE';
$reviewDetail='STACK EXCHANGE';
$StoreId=1;
$title='STACK EXCHANGE';


$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_review = $objectManager->get("Magento\Review\Model\Review")
->setEntityPkValue($productId)    //product Id
->setStatusId(\Magento\Review\Model\Review::STATUS_PENDING)// pending/approved
->setTitle($reviewTitle)
->setDetail($reviewDetail)
->setEntityId(1)
->setStoreId($StoreId)
->setStores(1)
->setCustomerId($customerId)//get dynamically here 
->setNickname($customerNickName)
->save();


echo "Review Has been saved ";

echo "/////FOR SAVING RATING /////////
     ///////////////////////////////";

/* 
 $_ratingOptions = array(
     1 => array(1 => 1,  2 => 2,  3 => 3,  4 => 4,  5 => 5),   //quality
     2 => array(1 => 6,  2 => 7,  3 => 8,  4 => 9,  5 => 10),  //value
     3 => array(1 => 11, 2 => 12, 3 => 13, 4 => 14, 5 => 15),  //price 
     4 => array(1 => 16, 2 => 17, 3 => 18, 4 => 19, 5 => 20)   //rating
);*/

//Lets Assume User Chooses Rating based on Rating Attributes called(quality,value,price,rating)
$ratingOptions = array(
            '1' => '1',
            '2' => '7',
            '3' => '13',
            '4' => '19'
);      

foreach ($ratingOptions as $ratingId => $optionIds) 
{     
       $objectManager->get("Magento\Review\Model\Rating")
                     ->setRatingId($ratingId)
                     ->setReviewId($_review->getId())
                     ->addOptionVote($optionIds, $productId);

}
echo  "Latest REVIEW ID ===".$_review->getId()."</br>";     
$_review->aggregate();
echo "Rating has been saved submitted  successfully";

?>
  • Can you please tell me how I store it for guest user? – Mayur May 1 '18 at 10:25
  • Hi @Mayur just keep $customerId=Null for guest user. – Nagaraju Kasa May 2 '18 at 4:57
  • you will get output as shown in this screenshot prnt.sc/jcmfm5 as well i updated code please check the same – Nagaraju Kasa May 2 '18 at 5:00
  • review added and i can see it in admin but in frontend its not showing any idea about that. – Jalpesh Patel May 23 '18 at 6:56
  • please approve the review from admin end check the same in the frontend and let me know – Nagaraju Kasa May 23 '18 at 7:05
0

You can browse the code of Magento\Review\Controller\Product\Post.php to see how post data is handled to create a review record.

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.