2016-05-16 17 views
2

カスタムテーブルにデータを保存するモジュールを作成しました。両方のテーブルには、「created_at」フィールドと「updated_at」フィールドがあります。しかし、これらのテーブルの "created_at"フィールドが自動的に設定されない場合、データを保存すると、ここで残りのデータとMagento - created_atフィールドが自動的に設定されない

は私のコードは次のとおりです。 SQLスクリプト:

->addColumn(
    'created_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array('nullable' => true,), 'Created At' 
) 
->addColumn(
    'updated_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array('nullable' => true,), 'Updated At' 
) 

Model.php

class my_Module extends Mage_Core_Model_Abstract 
{ 
     public function addMyList($customerId, $name) 
     { 
      $this->setData(
       array(
        'b2b_customer_id' => $customerId, 
        'name' => $name, 
       ) 
      ); 
      $this->save(); 
      return; 
     } 
} 

私は他の記事に見てきましたが、それらのほとんどが提出され、この "created_atと" を設定します関数内の残りのデータと一緒に使用します。私はMagentoがそれ自身を扱うべきだと思うので、私は欲しいものではありません。

しかし、私が間違っていると思っている場合や、コードが間違っている場合はお知らせください。

答えて

2

Magentoはいくつかの点で非常に特殊です。 created_atupdated_atを自動的に設定することは良いアイデアです - 現代のフレームワークの大半、 e。 Laravel、それをサポートする。

Magentoは自動的にcreated_atupdated_atを設定しません。

メソッドがあります。リソースモデルがあり、このクラスを拡張する場合は、created_atupdated_atが正しく設定されるようにこのメソッドを呼び出す必要があります。

/** 
* Prepare data for save 
* 
* @param Mage_Core_Model_Abstract $object 
* @return array 
*/ 
protected function _prepareDataForSave(Mage_Core_Model_Abstract $object) 
{ 
    $currentTime = Varien_Date::now(); 
    if ((!$object->getId() || $object->isObjectNew()) && !$object->getCreatedAt()) { 
     $object->setCreatedAt($currentTime); 
    } 
    $object->setUpdatedAt($currentTime); 
    $data = parent::_prepareDataForSave($object); 
    return $data; 
} 

必要に応じて手動で設定することもできます。

0

お使いのモデル:Mynamespace_mymodule_model_Mymodelには、_beforeSave()機能を追加するだけです。

Mynamespace_mymodule_model_Mymodel extends Mage_Core_Model_Abstract 

{ 
    public function _construct() 
    { 
     $this->_init('mynamespace_mymodule/myname'); 
    } 

    protected function _beforeSave() 
    { 
     parent::_beforeSave(); 
     $now = Mage::getSingleton('core/date')->gmtDate(); 
     if ($this->isObjectNew()) { 
      $this->setCreatedAt($now); 
     } 
     return $this; 
    } 
} 
関連する問題