2012-01-05 32 views
1

我增加了一个额外的字段来cataloginventory_stock_item更新到当前正值库存变化:定制的updated_at领域不起作用cataloginventory_stock_item CURRENT_TIMESTAMP

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

      $installer = new Mage_Eav_Model_Entity_Setup('core_setup'); 
      $installer->startSetup(); 
      $installer->getConnection()->addColumn(

      $installer->getTable('cataloginventory_stock_item'), 
      'updated_time', 
      'TIMESTAMP ON UPDATE NOW() NOT NULL DEFAULT NOW()' 

     ); 
     $installer->endSetup(); 

但是当数量在Magento改变字段不会更新当前时间戳(但数量确实发生变化)。

我也尝试创建一个使用的CURRENT_TIMESTAMP代替NOW()

回答

4

我相信ON UPDATE行为才会被MySQL被触发,如果你不因道路Magento的机型工作提供该列的值,场Varien_Object,从数据库加载的值将在您保存模型时发布。如果你想更新这个,你最好的选择可能是注册一个cataloginventory_stock_item_before_save的观察者,并使用setData将updated_time保存到数据库之前的当前时间。

+0

+1谢谢你,我非常赞赏的,为什么它不工作,部分 – rosh3000 2012-01-06 16:17:22

+1

顺便说一句,如果你去翻Magento数据库的结构,你会看到几个表在名为created_at的字段上有ON UPDATE行为,而不是在updated_at *** facepalm ***上。 – 2012-01-06 19:04:45

1

您可以在保存模型之前通过侦听cataloginventory_stock_item_save_before事件更新模型的updated_time数据值。

1

你可以做以下,使这项工作:

$item->setUpdatedAt(0); 

不要离手动设置时间戳不同,但它留给数据库进行设置。

如果它是一个自定义的模型,你也可以做模型如下:

protected function _beforeSave(Mage_Core_Model_Abstract $model) 
{ 
    $model->setUpdatedAt(0); 
} 
+0

这正是我正在寻找的,谢谢! – 2016-11-07 21:52:12