我创建了一个模块,它将一些数据保存到自定义表中。这两个表中都有"created_at"answers"updated_at"字段。但是,当我将数据保存到这些表中时,"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在某些方面非常特别。自动设置created_at
和updated_at
是个好主意——大多数现代框架,例如Laravel,都支持这一点。
Magento不会自动设置created_at
和updated_at
。
有一个Mage_Sales_Model_Resource_Abstract::_prepareDataForSave()
方法,所以如果您有一个资源模型,并且它扩展了这个类,那么您可以/应该调用这个方法来正确设置created_at
和updated_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;
}
如果需要,您仍然可以手动设置它。
在模型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;
}
}