cakePHP 3.0 在保存时忽略实体访问器
cakePHP 3.0 ignore entity accessors on save
我正在将项目从 2.x 转换为 3.x。一周后,我终于开始掌握新的 ORM,除了...
我现在不想尝试做曾经可以通过模型中的 afterFind
生命周期回调轻松实现的事情。
我有一个 Files
table 和 created
和 modified
DATETIME
列。我在 FilesTable
class 中使用蛋糕的时间戳行为。到目前为止一切正常。
当我尝试在 File
实体 class 中使用访问器 _getModified($modified)
来格式化任一字段时,问题就开始了。它在检索已经采用正确 DATETIME
格式的现有记录时工作正常,但是当我尝试保存任何新内容时,它会尝试保存访问者的格式化版本,而不是时间戳行为的版本,这会导致 0000-00-00 00:00:00
正在得救。
简而言之:我希望在 inserting/updating 记录时忽略访问器。
这是我的 File
实体 class:
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 方法并让时间戳行为控制 accessors/mutators for modified
属性
Entities > Creating Virtual Properties
注意:将实体转换为JSON或数组时,必须显式列出应导出到结果的虚拟字段。在这种情况下,将其添加到实体 Class
protected $_virtual = ['formatted_date'];
我正在将项目从 2.x 转换为 3.x。一周后,我终于开始掌握新的 ORM,除了...
我现在不想尝试做曾经可以通过模型中的 afterFind
生命周期回调轻松实现的事情。
我有一个 Files
table 和 created
和 modified
DATETIME
列。我在 FilesTable
class 中使用蛋糕的时间戳行为。到目前为止一切正常。
当我尝试在 File
实体 class 中使用访问器 _getModified($modified)
来格式化任一字段时,问题就开始了。它在检索已经采用正确 DATETIME
格式的现有记录时工作正常,但是当我尝试保存任何新内容时,它会尝试保存访问者的格式化版本,而不是时间戳行为的版本,这会导致 0000-00-00 00:00:00
正在得救。
简而言之:我希望在 inserting/updating 记录时忽略访问器。
这是我的 File
实体 class:
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 方法并让时间戳行为控制 accessors/mutators for modified
属性
Entities > Creating Virtual Properties
注意:将实体转换为JSON或数组时,必须显式列出应导出到结果的虚拟字段。在这种情况下,将其添加到实体 Class
protected $_virtual = ['formatted_date'];