【发布时间】:2012-03-26 15:54:46
【问题描述】:
我正在使用 Magento 版本。 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_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() 方法有效,并将名字更改为 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>
这是我的观察者方法:
$test = Mage::getModel('sales/order')->load($order->getId());
// write the khaos soc to the database
$test->setKhaosSoc('just testing');
$test->setCustomerFirstname('Charlie');
$test->save();
我有什么遗漏吗?
【问题讨论】:
标签: magento