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