我想向销售/订单添加一个属性,即 Mage_Sales_Model_Order,以存储一些额外的数据。
我发现销售/订单资源使用普通表。当我保存订单时,它只保存与表中的列匹配的字段。
添加此属性的正确方法是什么?
我会推荐以下几个答案的混合体。您肯定希望通过 config xml 将此代码放入安装脚本中,但如果您想利用 addAttribute 函数,您将希望使用 Mage_Eav_Model_Entity_Setup 作为安装类。所以你的配置 xml 看起来像这样......
<config>
...
<resources>
<modulename_setup>
<setup>
<module>Your_Module</module>
<class>Mage_Eav_Model_Entity_Setup</class>
</setup>
</modulename_setup>
</resources>
...
</config>
你的安装脚本应该是这样的
$installer = $this;
/* @var $installer Mage_Catalog_Model_Resource_Eav_Mysql4_Setup */
$installer->startSetup();
$installer->addAttribute('sales_order', 'attributename', array(
'group' => 'General',
'label' => 'Label frontend',
'note' => '',
'type' => 'string', //backend_type
'input' => 'text', //frontend_input
'frontend_class' => '',
'source' => '',
'backend' => '',
'frontend' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
'required' => false,
'visible_on_front' => false,
'apply_to' => 'simple',
'is_configurable' => false,
'used_in_product_listing' => false,
'sort_order' => 5,
));
$installer->endSetup();
请记住,这是未经测试的代码,您可能需要调整一些属性选项以使其按您需要的方式运行。
要在订单上添加新属性,您可以使用此代码,但只需一次。获取任何文件并将代码放在那里,执行一次并可以删除代码。
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttribute('sales_order', 'attributename', array(
'group' => 'General',
'label' => 'Label frontend',
'note' => '',
'type' => 'string', //backend_type
'input' => 'text', //frontend_input
'frontend_class' => '',
'source' => '',
'backend' => '',
'frontend' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
'required' => false,
'visible_on_front' => false,
'apply_to' => 'simple',
'is_configurable' => false,
'used_in_product_listing' => false,
'sort_order' => 5,
));