首页 > 解决方案 > Magento 2:sales_order_save_after

问题描述

当触发事件 sales_order_save_after 时,不会插入新的数量值:

Autosynch\Sale\etc\event.xml

<?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="sales_order_save_after">
        <observer name="autosynch_sales_order_save_after" instance="Autosynch\Sale\Observer\OrderPlaceAfter" />
    </event>
</config>

Autosynch\Sale\etc\module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Autosynch_Sale" setup_version="0.0.1">
    </module>
</config>

自动同步\销售\registration.php

<?php /**
* Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details.
*/
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Autosynch_sale', __DIR__);

Autosynch\Sale\Observer\OrderPlaceAfter.php

<?php
namespace Autosynch\Sale\Observer;
use Magento\Framework\Event\ObserverInterface;
class Observer implements ObserverInterface {

    protected $connector; public function __construct() { 
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
    }

    public function execute(\Magento\Framework\Event\Observer $observer) { 
        $order = $observer->getEvent()->getOrder();
        $customerId = $order->getCustomerId();
        $order_status       = $order->getStatus();

        if($customerId){ // Order Criada
            define("getHost", "100.100.100.100");
            define("getUser", "username");
            define("getPassword", "password");
            define("getDB", "dbname");
            $mysqli = new mysqli(getHost, getUser, getPassword, getDB);
            $mysqli->select_db("dbname");

                if($order_status == 'processing'){
                    mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '1')") or die(mysqli_error($mysqli));
                } else{
                    mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '2')") or die(mysqli_error($mysqli));
                }
        } else{
        mysqli_query($mysqli, "INSERT INTO `test` (`id`, `test`) VALUES (NULL, '3')") or die(mysqli_error($mysqli));        
        }
    }
}

标签: phpmysqlmagento2

解决方案


此代码是否引发任何错误?如果有,你提供吗?此外,由于您使用的是 magento,因此最好使用它自己的 ORM 而不是原始查询。在您的模块中,您可以在 magento 应用程序数据库和模型中创建表以访问这些表。这是最好的方法!


推荐阅读