2016-08-23 5 views
0

sales_flat_orderにカスタム列が使用されていますが、注文が完了したらこの表の列の値を更新したいだけです。残念ながら、列の値が更新され取得されていない、magentoで注文完了後にsales_flat_orderテーブルのカスタム列を更新します

public function salesOrderSaveAfter(Varien_Event_Observer $observer) { 
    $order = $observer->getEvent()->getOrder(); 
    $orderId = $order->getId(); 

    $Incid=$order->getIncrementId(); 

    if ($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE) { 
     $con=Mage::getSingleton('core/resource'); 
     $write=$con->getConnection('core_write'); 
     $query= "update `sales_flat_order` set `vorder_payment_state` = 2 where `entity_id`='.$orderId.'"; 
     $write->query($query); 
    } 
} 

しかし、私は、イベントsales_order_save_afterを使用し、以下のコードでいます。あなたがして試すことができ

+0

は 'sales_order_save_commit_after'イベントオブザーバを試してみてください。 –

+0

私はあなたのオブザーバーが起こっていると思われるかどうかを確認するためにいくつかのログを追加したいと思います。 $ order-> setVorderPaymentState(2) - > save() 'を呼び出すことができるはずです(obseverを一度しか呼び出さないように調整した場合)または' sales_order_invoice_save_after'を聞くことができます –

+0

間違っている場合Magento ORMを使用する必要があります。異なるイベントを使用すると、注文が保存される前にトリガーされたイベントが発生します。単に$ order-> setVorderPaymentState(2)を実行すれば、オーダーアトリビュートをオーバーヘッドなしで更新できます。 –

答えて

0

if ($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE) { 
    $order->setVorderPaymentState(2); 
    try{ 
     $order->save(); 
    } catch (Exception $ex) { 
     Mage::throwException($ex->getMessage()); 
    } 
} 
関連する問題