我创建了一个模块,它将一些数据保存到自定义表中。两个表中都有“created_at”和“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'
)
模型.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 应该自己处理它。
但是如果我的想法错误或者代码有错误,请告诉我。
最佳答案
嗯,Magento 在某些方面非常特别。自动设置 created_at
和 updated_at
是一个好主意 - 大多数现代框架,例如。 e. 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;
}
如果需要,您仍然可以手动设置。
关于php - Magento - "created_at"字段不会与其余数据一起自动设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253440/