Skip to content
Advertisement

Magento 2 – How to save data after the order was successfull in a custom table

First: I understand how to create a custom module within a customtable in the backend. I had already done this and it works fine and I can save some information with it in the backend. (Name: app/code/TestModule/Module)

But now I try to customize the order process. I want to save some data, like the ‘oder_id’ and the ‘order_date’ in a custom table.

This process should work automatically after the order was successful.

Problem: I don’t understand how I can store this information in a custom table.

I have this in my success.phtml for checking the data in the frontend:

<?php 
$block->getOrderId()
$block->getShippingMethod() 
?>

The data is called with a function, here in my Block/Onepage/Success.php

...

public function getShippingMethod()
{
    return $this->_checkoutSession->getLastRealOrder()->getShippingMethod();
}   

...

Well, and now I don’t have any ideas for the next steps. For example, I saw this tut here In magento 2 what is the correct way for getModel? but it does not help me.

Other questions on stackoverflow answer only how to build a module or how to show order information.

I think i have to do something like this:

    $this->_Modulename->addData($data);
    $this->_transaction->save();

But after 3 days of reading, I try my luck here. I don’t need a final solution and I don’t want a copy and paste of the answer code, I just won’t understand how this “save data in the custom table after success” works.

I take everything from you guys because I am at the end of my knowledge.

TYIA

Advertisement

Answer

Ok, I have it now.

Some functions like the “order-id” in:

app/code/Modules/Modulename/Block/Onepage/Success.php

<?php
namespace ModulesModulenameBlockOnepage;

class Success extends MagentoCheckoutBlockOnepageSuccess
{
    public function getEntityId()
    {
       return $this->_checkoutSession->getLastRealOrder()->getEntityId();
    }   
}

The following save-function is in one file: app/code/Modules/Modulename/view/frontend/templates/succes.phtml

// get order-id (the EntityId) ###
    $order_id = $block->getEntityId();

    $objectManager = MagentoFrameworkAppObjectManager::getInstance();
    $resource = $objectManager->get('MagentoFrameworkAppResourceConnection');

create connection DB

    $connection = $resource->getConnection();

Create query and fetch data from database:

    $tableName = $resource->getTableName('sales_order_item');
    $sql = "Select * FROM ". $tableName. " WHERE order_id =". $order_id;
    $result = $connection->fetchAll($sql);

And now we get them with a foreach. The “$n” is the count for all products and the “$productQty” is for each product qty. Example:

ordered:

2 x red ball

1 x green bottle

So you have to count for all products (2 (bottle and ball)) and for each product qty (2x ball, 1x bottle). I hope it is clear what i mean 😉

    // do this for all products (in my case 2 times)
    $n = 0;
    foreach ($result as $allOptionkey) {

    $allOptionkey = array(unserialize($result[$n]['product_options']));
    $productTitle =  $result[$n]['name'];

        foreach ($allOptionkey as $keys) {
            $product = $keys['info_buyRequest'];
            $options = $keys['options'];

            $productKeyArray = array('0' => $product);

            foreach ($productKeyArray as $productKey => $productVar) {
              $productName = $productVar['product'];
              // get "product qty"
              $productQty = $productVar['qty'];
            }
        }
    $qn=0;
    $n++;
         // do this for each product qty (im my case 2x ball and 1 bottle)
        while($productQty > $qn) {
              $qncounter = $qn++;

              $tableModulename = $resource->getTableName('table_name');
              $sqlInsert = "Insert Into ".$tableModulename." (options,email) Values ( '".$productTitle."', '".$email."')";
             $connection->query($sqlInsert);
        }
    }

I build this “save-function” to save each ordered product in a custom table.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement