Я в процессе преобразования проекта от 2.x до 3.x. Через неделю я наконец начал понимать новую ОРМ, за исключением ...cakePHP 3.0 игнорировать сущности accessors при сохранении
Я не очень хорошо пытаюсь сделать то, что когда-то было легко достигнуто с помощью обратного вызова жизненного цикла в модели ,
У меня есть таблица Files
с created
и modified
DATETIME
колонны. Я использую поведение меток торта в моем классе FilesTable
. Все работает правильно до этого момента.
Проблема возникает, когда я пытаюсь использовать accessor _getModified($modified)
в классе сущности File
для форматирования любого из полей. Он отлично работает при получении существующих записей, которые уже находятся в правильном формате DATETIME
, но когда я пытаюсь сохранить что-либо новое, он пытается сохранить форматированную версию аксессура, а не версию поведения Timestamp, что приводит к сохранению 0000-00-00 00:00:00
.
Вкратце: я хочу, чтобы аксессор игнорировался при вставке/обновлении записей.
Вот мой File
объект класса:
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));
}
}
}
Заранее спасибо за любую помощь!
Поскольку это, кажется, служат лишь презентационные цели, я бы также рассмотреть возможность обработки этого с помощью помощников. – ndm
Ответ Романа был бы правильным, за исключением: я извлекаю эти данные с помощью запроса ** AJAX ** и возвращая объект ** JSON ** с результатами ** find **. Виртуальные свойства не могут использоваться в находках. Я ищу способ форматировать поле и иметь его в результатах без необходимости прокручивать результаты. Опять-таки, что-то вроде того, что мы делали с ** afterFind ** в 2.x. –
, если вы выставляете виртуальную собственность, ее следует экспортировать в результат JSON. Попробуйте добавить эту строку в свой класс Entity: 'protected $ _virtual = ['formatted_date'];' –