2015-02-04 5 views
1

В моем модуле Magento моего клиента я добавил пользовательский атрибут (hearedfrom) в заказ, этот атрибут установлен в объекте order (get after set возвращает значения), но он Кажется, что они не сохраняются в БД.Неверный атрибут пользовательского заказа Magento 1.9 (EAV_entity_text)

MyModule/и т.д./config.xml

<resources> 
 
    <hearedfrom_setup> 
 
    <setup> 
 
     <module>Brainworx_Hearedfrom</module> 
 
\t  <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class> 
 
    </setup> 
 
    <connection> 
 
     <use>core_setup</use> 
 
    </connection> 
 
    </hearedfrom_setup> 
 
</resources>

MySqlInstall

$installer = $this; 
 

 
$installer->startSetup(); 
 

 
//get the entity type for orders 
 
$sql = "SELECT entity_type_id FROM ".$this->getTable('eav_entity_type')." WHERE entity_type_code='order'"; 
 
Mage::Log("Hearedfrom: " .$sql); 
 
$row = Mage::getSingleton('core/resource')->getConnection('core_read')->fetchRow($sql); 
 
    
 
$attribute = array(
 
\t 'type' \t \t \t => 'text', 
 
\t 'label' \t \t \t => 'Hearedfrom', 
 
\t 'visible' \t \t => true, 
 
\t 'required' \t \t => false, 
 
\t 'user_defined' \t => true, 
 
\t 'searchable' \t => true, 
 
\t 'filterable' \t => true, 
 
\t 'comparable' \t => false, 
 
); 
 
//add attribute for the sale/order 
 
$installer->addAttribute($row['entity_type_id'], 'hearedfrom', $attribute); 
 

 
$installer->endSetup();

Наблюдатель, где я сохранить значение в новом атрибуте.

public function hookToOrderSaveEvent() 
 
\t { 
 
\t \t /** 
 
\t \t * NOTE: 
 
\t \t * Order has already been saved, now we simply add some stuff to it, 
 
\t \t * that will be saved to database. We add the stuff to Order object property 
 
\t \t * called "hearedfrom" 
 
\t \t */ 
 
\t \t $order = new Mage_Sales_Model_Order(); 
 
\t \t $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
 
\t \t $order->loadByIncrementId($incrementId); 
 
\t \t 
 
\t \t //Fetch the data from select box and throw it here 
 
\t \t $_hearedfrom_data = null; 
 
\t \t $_hearedfrom_data = Mage::getSingleton('core/session')->getBrainworxHearedfrom(); 
 
\t \t //$this->_getRequest()->getPost(‘myCustomerOrderComment’, false); 
 
\t \t Mage::Log("Order brought by: ".$_hearedfrom_data); 
 
\t \t 
 
\t \t //Save fhc id to order obcject 
 
\t \t $order->setData(self::ORDER_ATTRIBUTE_FHC_ID, $_hearedfrom_data); 
 
\t \t Mage::Log("test: ".$order->getHearedfrom()); 
 
\t \t $order->save(); 
 
\t }

В моем журнале я могу увидеть значение до и после установки его в моем $ порядке. Данные имеют запись для значения. В БД я могу увидеть enty в EAV_ATTRIBUTE, связанном с EAV_ENTITY_TYPE и EAV_ENTITY_ATTRIBUTE. Но я ожидал бы, что сохраненное значение будет в EAV_ENTITY_TEXT, которое не содержит записей.

После перезагрузки размещенного заказа он не содержит атрибута клиента.

Что мне здесь не хватает?

Благодаря

ответ

2

Вы можете увидеть свой атрибут в таблице sales_flat_order?

Если нет, я полагаю, что ваша проблема связана с настройкой Каталога вместо Sales. Попробуйте вместо этого использовать Mage_Sales_Model_Resource_Setup. Вместо этого добавьте такой атрибут:

$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'hearedfrom', array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT, 
'nullable' => true, 
'default' => 0 
)); 

Также чистые пулы magento. Я считаю, что некоторые SQL-запросы все еще кэшируются, даже если они все отключены. Когда заказ сохраняется в базе данных, SQL-запрос DESCRIBE определит, какие свойства сохраняются в базе данных. Недавно я столкнулся с проблемой, когда запрос описания не включал мой новый столбец, поэтому значение не было сохранено.

0

Решено, привязав моего обработчика к order_save_after_event вместо order_save_event

Смежные вопросы