我正在将一个项目从2. x转换到3. x。一周后,我终于开始掌握新的ORM,除了...
我没有很好地尝试在模型中使用afterFind
生命周期回调实现曾经很容易实现的功能。
我有一个Files
表,其中包含创建的和修改的DATETIME
列。我使用蛋糕的时间戳行为在我的FilesTable
类。到目前为止,一切正常。
当我试图在文件
实体类中使用访问器\u getModified($modified)
格式化任一字段时,问题就开始了。当检索已采用正确的DATETIME
格式的现有记录时,它可以正常工作,但当我尝试保存任何新记录时,它会尝试保存访问者的格式化版本,而不是时间戳行为的版本,这会导致保存0000-00-00 00:00:00
。
简而言之:我希望在插入/更新记录时忽略访问器。
这是我的文件
实体类:
class File extends Entity {
protected function _getModified($modified) {
$today = date("m-d-y");
$year = date("Y");
$file_day = date("m-d-y", strtotime($modified));
$file_year = date("Y", strtotime($modified));
if( $today === $file_day){
return 'Today ' . date('g:ia', strtotime($modified));
} else if ($year !== $file_year) {
return date('M j, Y', strtotime($modified));
} else {
return date('M j, g:ia', strtotime($modified));
}
}
}
提前感谢您的帮助!
你应该考虑创建虚拟财产
protected function _getFormattedDate()
{
// Move here code from _getModified
// $modified = $this->_properties['modified']
}
删除您的_getModified方法,并让时间戳行为控制modified
属性的访问器/变异器
实体
注意:将实体转换为JSON或数组时,必须显式列出应导出到结果的虚拟字段。在这种情况下,将其添加到实体类
protected $_virtual = ['formatted_date'];
实体