Back to Top

How to save a custom column value in Product Review Details

Updated 19 June 2024

Hello Friends!!!

In this blog, we will learn how we can save a custom column’s value in a product review details record table in the database. To achieve this functionality, we will follow the below steps:

1. We will create our custom_column in the review_detail record table in the app/code/Vendor/Module/etc/db_schema.xml file.

<?xml version="1.0"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <!--Adding custom_column field in review_detail table-->
    <table name="review_detail" resource="default" comment="Review Detail">
        <column xsi:type="int" name="custom_column" 
            unsigned="true" padding="2" 
            nullable="false" default="0" 
            comment="Custom Column"/>
    </table>
</schema>

2. Now, we will create an events.xml file inside the app/code/Vendor/Module/etc directory. And we will add our custom observer class for the review_save_after event.

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="review_save_after">
    <observer name="wk_update_product_review_after_observer"
      instance="Vendor\Module\Observer\SaveReviewAfter"/>
  </event>
</config>

3. Now, we will create a SaveReviewAfter.php file inside the app/code/Vendor/Module/Observer directory.

<?php
namespace Vendor\Module\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Message\ManagerInterface;

class SaveReviewAfter implements ObserverInterface
{
    /**
     * @var ManagerInterface
     */
    private $_messageManager;

    /**
     * @param ManagerInterface $messageManager
     * @param \Magento\Framework\App\RequestInterface $request
     * @param \Magento\Framework\App\ResourceConnection $resource
     */
    public function __construct(
        ManagerInterface $messageManager,
        \Magento\Framework\App\RequestInterface $request,
        \Magento\Framework\App\ResourceConnection $resource
    ) {
        $this->_request        = $request;
        $this->_resource       = $resource;
        $this->_messageManager = $messageManager;
    }

    /**
     * Execute Method to save user id in review_detail record table
     * 
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        try {
                $review = $observer->getEvent()->getDataObject();
                $connection = $this->_resource;
                $value = 12;
                $tableName = $connection->getTableName('review_detail');
                $detail = [
                    'custom_column' => $value,
                ];

                $select = $connection->getConnection()->select()
                    ->from($tableName)
                    ->where('review_id = :review_id');
                $detailId = $connection->getConnection()
                    ->fetchOne($select, [':review_id' => $review->getId()]);

                if ($detailId) {
                    $condition = ["detail_id = ?" => $detailId];
                    $connection->getConnection()->update($tableName, $detail, $condition);
                } else {
                    $detail['store_id'] = $review->getStoreId();
                    $detail['customer_id'] = $review->getCustomerId();
                    $detail['review_id'] = $review->getId();
                    $connection->getConnection()->insert($tableName, $detail);
                }
            
        } catch(Exception $e){
            $this->_messageManager->addError($e->getMessage());
        }
    }
}

Now, we will execute the setup upgrade command and flush the cache, then we will save the review and check the result.

Hope this will be helpful.
Thanks 🙂

Searching for an experienced
Magento 2 Company ?
Find out More
. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


Be the first to comment.

Back to Top

Message Sent!

If you have more details or questions, you can reply to the received confirmation email.

Back to Home