观察者不保存顺序


Observer doesn't save order

我已经构建了一个侦听sales_convert_quote_to_order事件的观察者。事件被触发,我只想给订单的属性添加一个值。属性被设置了——打印在日志中——但是magento不保存订单。我做错了什么?

Observer.php

public function addLangToOrder($observer){
        Mage::log('catching convert_quote_to_order_after');
        $order = $observer->getEvent()->getOrder();
        $order->setCustomerLanguage(Mage::app()->getStore()->getCode());
        $order->save();
        Mage::log($order->getCustomerLanguage());
    }

config . xml

<events>
    <sales_convert_quote_to_order>
        <observers>
            <accustomer>
                <type>singleton</type>
                <class>Ac_Customer_Model_Observer</class>
                <method>addLangToOrder</method>
            </accustomer>
        </observers>
    </sales_convert_quote_to_order>
</events>

我已经通过安装脚本添加了属性customer_language

$customer_lang = 'customer_language';
$installer->addAttribute('order', $customer_lang, array('type'=>'varchar'));

customer_language列存在于sales_flat_order表中。但是它没有被保存。

我使用Magento 1.4.1.1

您需要将您的属性添加到- quote sales模型-以使此工作

由于Magento将从quote复制已定义的<fieldset> *到order,因此您也需要相应地扩展覆盖类的config.xml:

<config>
    <!-- : -->
    <global>
        <fieldsets>
            <sales_convert_quote>
                <customer_language><to_order>*</to_order></customer_language>
            </sales_convert_quote>
        </fieldsets>
    </global>
    <!-- : -->
</config>

* <子>的config.xml Mages_Sales

在此之前是否有事务发生?根据我的经验,试图在事务仍在进行时保存模型是行不通的。我必须将观察者移动到事务之后的另一个事件,例如"sales_model_service_quote_submit_after"。