我正在使用Magento ver。 1.6.2.0。
在阅读了大量帖子和问题后(在SO和其他地方),我试图在sales_flat_order表中添加一个属性。在Magento的早期版本中,销售/订单模型使用了EAV方法,但从我可以收集的内容来看,在1.4之后,它被移到了平面桌上。
所以,这是我的mysql-install文件:
$installer = $this;
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'khaos_soc', 'varchar(255) NULL');
已在sales_flat_order表中添加了一列。
我的问题是我无法设置要插入该字段的数据。我有一个观察者,由事件'checkout_submit_all_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','只是测试')来处理不起作用的方法。
我已经通过在数据库中手动设置'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>
这是我的观察员方法:
$test = Mage::getModel('sales/order')->load($order->getId());
// write the khaos soc to the database
$test->setKhaosSoc('just testing');
$test->setCustomerFirstname('Charlie');
$test->save();
我有什么遗失的吗?
答案 0 :(得分:3)
这可能是你的缓存。即使您已禁用缓存,或已通过管理员清除缓存,我相信仍然会发生数据库缓存。试试rm -rf var/cache/*
,看看是否有诀窍。
答案 1 :(得分:3)
您应该使用Mage_Sales_Model_Resource_Setup::addAttribute()
方法,因为它负责修改平面表。并且您不应该手动执行此操作,请致电addColumn
答案 2 :(得分:1)
你应该采取另一种方式:
config.xml
中检入您的安装模型类型为Mage_Eav_Model_Entity_Setup
:<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();
Magento - Adding a new column to sales_flat_quote_item and sales_flat_order_item`的所有学分都在这里输入代码