2016-05-16 4 views
2

Ich habe ein Modul erstellt, das einige Daten in die benutzerdefinierten Tabellen speichert. Beide Tabellen haben Felder "created_at" und "updated_at" in ihnen. Aber wenn ich die Daten in einem der Felder "Created_at" dieser Tabellen speichert, wird nicht automatisch festgelegt.Magento - Feld "created_at" wird nicht automatisch mit dem Rest der Daten gesetzt

Hier ist mein Code: SQL-Skript:

->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; 
     } 
} 

ich in anderen Beiträgen ausgesehen haben, aber die meisten von ihnen setzen dieses "created_at" eingereicht zusammen mit den restlichen Daten in der Funktion. Was ist nicht genau das, was ich will, weil ich denke, Magento sollte es selbst handhaben.

Aber lass es mich wissen, wenn ich falsch denke oder der Code irgendwie falsch ist.

Antwort

2

Nun, Magento ist in mancher Hinsicht etwas Besonderes. Einstellung created_at und updated_at automatisch ist eine gute Idee - die meisten der modernen Frameworks, ich. e. Laravel, unterstützen Sie das.

Magento setzt created_at und updated_at nicht automatisch.

Es gibt eine Mage_Sales_Model_Resource_Abstract::_prepareDataForSave() Methode - wenn Sie also ein Ressourcenmodell haben und diese Klasse erweitert, können/sollten Sie diese Methode aufrufen, um Ihre created_at und updated_at richtig zu setzen.

/** 
* 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; 
} 

Sie können es immer noch manuell einstellen, wenn Sie möchten.

0

In Ihrem Modell: Mynamespace_mymodule_model_Mymodel, fügen Sie einfach die _beforeSave() Funktion hinzu.

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; 
    } 
} 
Verwandte Themen