Magento 无法为sales\u flat\u order表设置自定义属性

Magento 无法为sales\u flat\u order表设置自定义属性,magento,Magento,我正在使用Magento ver。1.6.2.0. 在阅读了许多帖子和问题(关于SO和其他地方)后,我尝试向我的sales_flat_order表添加一个属性。在以前版本的Magento中,销售/订单模型使用EAV方法,但据我所知,在1.4版之后,它被移动到了一个平面表中 下面是我的mysql安装文件: $installer = $this; $installer->getConnection()->addColumn($installer->getTable('sales/

我正在使用Magento ver。1.6.2.0.

在阅读了许多帖子和问题(关于SO和其他地方)后,我尝试向我的sales_flat_order表添加一个属性。在以前版本的Magento中,销售/订单模型使用EAV方法,但据我所知,在1.4版之后,它被移动到了一个平面表中

下面是我的mysql安装文件:

$installer = $this;
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'khaos_soc', 'varchar(255) NULL');
它在我的sales\u flat\u order表中添加了一列

我的问题是无法设置要插入该字段的数据。我有一个观察者,它被事件“checkout\u submit\u all\u after”调用。代码检索当前订单id,然后尝试设置“khaos_soc”数据,代码如下:

$test = Mage::getModel('sales/order')->load($order->getId());
// write the khaos soc to the database
$test->setKhaosSoc('just testing');
$test->setCustomerFirstname('Charlie');
$test->save();
setCustomerFirstname()方法可以工作,并将firstname更改为Charlie,但setKhaosSoc()方法不会将任何内容保存到数据库中。我也尝试过使用setData(“khaos_soc”,“just testing”)的方式来做同样不起作用的事情

我已经通过在数据库中手动设置“khaos_soc”的值来测试了这一点,然后调用了适当的顺序并回显了getKhaosSoc()结果,结果成功了,但我仍然无法设置它

因此,我可以为我的自定义属性检索手动创建的条目,但我不能设置它们。有人能解释这是为什么吗

亲切问候,

詹姆斯


我已经尝试过Zyava建议的方法,但仍然没有成功。这是我的升级代码:

$installer = $this;
$installer->startSetup();
$installer->addAttribute(
    'order', 
    'khaos_soc', 
    array(
        'type' => 'varchar', /* varchar, text, decimal, datetime */
        'grid' => false /* or true if you wan't use this attribute on orders grid page */
    )
);
$installer->endSetup();
下面是我的config.xml:

<?xml version="1.0"?>
<!-- 
/**
 * @category   Symphony
 * @package    Symphony_Khaosorders
 * @author     ModuleCreator
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 -->
<config>
    <modules>
        <Symphony_Khaosorders>
            <version>0.1.8</version>
        </Symphony_Khaosorders>
    </modules>
    <frontend>
        <routers>
            <khaosorders>
                <use>standard</use>
                <args>
                    <module>Symphony_Khaosorders</module>
                    <frontName>khaosorders</frontName>
                </args>
            </khaosorders>
        </routers>
        <layout>
            <updates>
                <khaosorders>
                    <file>khaosorders.xml</file>
                </khaosorders>
            </updates>
        </layout>
    </frontend>
    <admin>
        <routers>
            <khaosorders>
                <use>admin</use>
                <args>
                    <module>Symphony_Khaosorders</module>
                    <frontName>khaosorders</frontName>
                </args>
            </khaosorders>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <khaosorders module="khaosorders">
                <title>Khaosorders</title>
                <sort_order>71</sort_order>               
                <children>
                    <items module="khaosorders">
                        <title>Manage Items</title>
                        <sort_order>0</sort_order>
                        <action>khaosorders/adminhtml_khaosorders</action>
                    </items>
                </children>
            </khaosorders>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Symphony_Khaosorders>
                            <title>Khaosorders Module</title>
                            <sort_order>10</sort_order>
                        </Symphony_Khaosorders>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <khaosorders>
                    <file>khaosorders.xml</file>
                </khaosorders>
            </updates>
        </layout>
    </adminhtml>   
    <global>
        <models>
            <khaosorders>
                <class>Symphony_Khaosorders_Model</class>
                <resourceModel>khaosorders_mysql4</resourceModel>
            </khaosorders>
            <khaosorders_mysql4>
                <class>Symphony_Khaosorders_Model_Mysql4</class>
                <entities>
                    <khaosorders>
                        <table>khaosorders</table>
                    </khaosorders>
                </entities>
            </khaosorders_mysql4>
        </models>
        <resources>
            <khaosorders_setup>
                <setup>
                    <module>Symphony_Khaosorders</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </khaosorders_setup>
            <khaosorders_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </khaosorders_write>
            <khaosorders_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </khaosorders_read>
        </resources>
        <blocks>
            <khaosorders>
                <class>Symphony_Khaosorders_Block</class>
            </khaosorders>
        </blocks>
        <helpers>
            <khaosorders>
                <class>Symphony_Khaosorders_Helper</class>
            </khaosorders>
        </helpers>
    </global>
</config>

我有什么遗漏吗?

你应该换一种方式:

  • config.xml
    中检查您的安装模型类型是否为
    Mage\u Eav\u model\u Entity\u Setup


  • “在此处输入代码”的所有积分可能是您的缓存。即使您禁用了缓存,或者通过管理员清除了缓存,我相信仍然存在DB缓存。尝试
    rm-rf var/cache/*
    ,看看这是否奏效。

    您应该使用
    Mage\u Sales\u Model\u Resource\u Setup::addAttribute()
    方法,因为它负责修改平面表。你不应该手动操作,打电话给
    addColumn

    谢谢Zyava,这是我试过的帖子之一。我又看了一遍,但仍然没有保存到数据库中。“khaos_soc”列已经添加,但我无法设置数据并保存它。感谢Zyava,我可以确认,因为我按照sparcksofts的建议清除了缓存,所以这就是方法。
    $installer=$this
    应该是
    $installer=new Mage_Sales_Model_Mysql4_设置('core_设置')正如@roman snitko所建议的。因此,请将我的回答标记为答案,伙计!:)很高兴你明白了这一点,我知道有时候处理db升级会是一种巨大的、令人发狂的痛苦。
    
    $test = Mage::getModel('sales/order')->load($order->getId());
    // write the khaos soc to the database
    $test->setKhaosSoc('just testing');
    $test->setCustomerFirstname('Charlie');
    $test->save();
    
    <global>
         <resources>
             <your_module_setup>
                  <setup>
                      <module>Your_Module</module>
                      <class>Mage_Sales_Model_Mysql4_Setup</class>
                  </setup>
             </your_module_setup>
         </resources>
     </global>
    
    $installer = $this;
    $installer->startSetup();
    $installer->addAttribute(
        'quote_item', 
        'your_attribute_code', 
        array(
            'type' => 'int', /* varchar, text, decimal, datetime */,
        )
    );
    $installer->endSetup();