追加のデータを保存するために、Mage_Sales_Model_Order という属性を sales/order に追加したいと考えています。
sales/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();
これはテストされていないコードであり、必要に応じて機能させるには、いくつかの属性オプションを微調整する必要がある場合があることに注意してください。
注文時に新しい属性を追加するには、このコードを使用しますが、一度だけです。任意のファイルを取得してそこにコードを配置し、1 回実行してコードを削除できます。
$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,
));