Magento 2 - 订单在自定义表格中成功后如何保存数据

时间:2016-08-19 14:36:58

标签: php magento magento2

首先:我了解如何在后端的自定义文件中创建自定义模块。我已经完成了这个并且它工作正常,我可以在后端保存一些信息。 (名称:app / code / TestModule / Module)

但现在我尝试自定义订单流程。 我想保存一些数据,比如' oder_id'和' order_date'在自定义表格中。

订单成功后,此流程应自动生效。

问题: 我不明白如何将这些信息存储在自定义表格中。

我在 success.phtml 中有这个用于检查前端数据的内容:

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

使用函数调用数据,在 Block / Onepage / Success.php

...

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

...

好吧,现在我对接下来的步骤没有任何想法。例如:我在这里看到了这个啧啧In magento 2 what is the correct way for getModel?,但它对我没有帮助。

有关stackflow的其他问题仅回答如何构建模块或如何显示订单信息。

我想我必须做这样的事情:

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

但是经过3天的阅读,我在这里试试运气。 我不需要最终的解决方案,我不想复制并粘贴答案代码,我只想了解这是如何在成功之后将数据保存在自定义tabele中#34;的工作原理。

我从你们那里拿走了所有东西,因为我知道这一切。

TYIA

1 个答案:

答案 0 :(得分:0)

好的,我现在有了。

某些功能,例如&#34; order-id&#34;在:

应用程序/代码/模块/ MODULENAME / 阻止/ Onepage / Success.php

<?php
namespace Modules\Modulename\Block\Onepage;

class Success extends \Magento\Checkout\Block\Onepage\Success
{
    public function getEntityId()
    {
       return $this->_checkoutSession->getLastRealOrder()->getEntityId();
    }   
}

以下save-function位于一个文件中:app/code/Modules/Modulename/view/frontend/templates/succes.phtml

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

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $resource = $objectManager->get('Magento\Framework\App\ResourceConnection');

创建连接数据库

    $connection = $resource->getConnection();

创建查询并从数据库中获取数据:

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

现在我们用 foreach 来获取它们。 &#34; $ n&#34;是所有产品的计数和&#34; $ productQty&#34;是每个产品数量。 示例:

有序:

2 x红球

1 x绿瓶

所以你必须计算所有产品(2(瓶子和球))和每个产品数量(2x球,1x瓶)。我希望很清楚我的意思;)

    // 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);
        }
    }

我构建了这个&#34; save-function&#34;将每个订购的产品保存在自定义表格中。