2012-01-05 4 views
1

は、私は現在の時刻に更新するcataloginventory_stock_itemに余分なフィールドを追加CURRENT_TIMESTAMP動作しない場合の株式の変更:カスタムはcataloginventory_stock_itemが

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の中で変更されたときにフィールドがに更新されません。現在のタイムスタンプ(ただし、数量は変更されます)。

私はまた、あなたがMagentoのモデルが作業方法が原因その列の値を、提供しない場合のみ、MySQLがトリガされます私はUPDATE行動を信じる代わりにNOW()

答えて

4

CURRENT_TIMESTAMPを使用してフィールドを作成してみましたVarien_Objectでは、モデルを保存するとデータベースから読み込まれた値がポストされます。これを更新したい場合は、おそらくcataloginventory_stock_item_before_saveにオブザーバーを登録し、setDataを使用してデータベースに保存される前の現在の時刻をupdated_timeにすることが最善の策です。

+0

1は、あなたが目を通すならば、それは、さておきとして一部 – rosh3000

+1

機能しない理由を私はずっと感謝、ありがとうございましたMagentoデータベースの構造を見ると、created_atというフィールドにはON UPDATEビヘイビアがあり、updated_at *** facepalm ***ではなく、いくつかのテーブルにON UPDATEビヘイビアがあることがわかります。 –

1

cataloginventory_stock_item_save_beforeイベントをリッスンしてモデルを保存する直前に、モデルのupdated_timeデータ値を更新できます。手動でタイムスタンプを設定することから

$item->setUpdatedAt(0); 

あまりにも異なっていないが、それを設定するには、データベースに任されている:

1

あなたはこの仕事をするために次の操作を行うことができます。

それがカスタムモデルだ場合は、モデルで次の手順を実行することができます

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

これはまさに私が探していたものです、ありがとう! –

関連する問題