Yii изменение аттрибутов модели после выборки из БД AfterFind

Довольно часто при использовании ActiveRecord для выборки или поиска данных, нам необходимо некоторые из полученных аттрибутов немного преобразовать, т е получить не голое значение из БД, а немного преобразованное. Например дата поста у нас храниться в типе UNIX Timestamp, и конечно же при выводе мы хотим использовать более понятный простому пользователю формат. Например:


//Код действия, выбираем из БД одну новость по ид
$news = NEWS::model()->findByPk($id);

//выводим дату во вьюшке
echo date('d.m.Y', $news->create);

Вроде бы все хорошо, но теперь представте что мы много раз вызываем список новостей и везде выводим дату, такив выводов у нас от 10 штук и более. И вот в один прекрасный момент нам надо изменить формат вывода, добавить еще время. Теперь нам придется искать все места вывода даты и менять формат, но есть вариант получше. Метод AfterFind(), позволяет преобразовать значение аттрибута после выборки из базы данных. Например:


//Добавляем в модель, теперь значение нам достаточно изменять здесь
protected function afterFind()
{
    parent::afterFind();
    $this->created=$date('d.m.Y H:i:s', $this->created);
}

//Код действия, выбираем из БД одну новость по ид
$news = NEWS::model()->findByPk($id);

//и теперь во вьюшке выводим просто аттрибут модели
echo $news->create;

Данный метод позволит нам избежать дублирования кода, и довольно легко и быстро менять форматы вывода даты. Ну и вообще у этого подхода очень много вариантов использования!

Теги: YII
Новости