Коллекция материалов и статей для веб разработчиков


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;

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

Tags: 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA