JohnDaniels
@JohnDaniels

Как задать правила форматирования даты в модели YII2?

Привет.

Имеется ActiveRecord модель, содержащая поле created_at, тип поля в бд - timestamp.

мне нужно выбрать нужные записи и отправить их в виде json, то есть так:

\Yii::$app->response->format = Response::FORMAT_JSON;
        $consultations = Consultation::find()->orderBy('id DESC')->limit(5)->asArray()->all();
        return $consultations;


все хорошо, но поле created_at имеет вид "2017-06-09 16:14:09", а мне нужна короткая запись "09.06.17".
В идеале я бы хотел добавить в модель свое поле formattedDate, которое брало бы данные из created_at и форматировало как мне нужно.

1. Как это правильно делается в Yii? В ларавеле можно использовать например мутаторы для таких целей, тут ничего похожего не нашел.
2. Как вообще добавлять свои поля в модели? я указал public свойство, добавил его в rules, но его все равно не видно.
  • Вопрос задан
  • 559 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если везде надо такие преобразования производить, то можно засунуть логику в afterFind
Если не везде но часто - сделайте гетер в моделе, который делает нужные преобразования, например:
public function getShortDate(){
  return \Yii::$app->formatter->asDate($this->created_at, 'short');
}

Если однократно, то так можно:
$consultations = Consultation::find()->orderBy('id DESC')->limit(5)->all();
$data = ArrayHelper::toArray($consultations [
    'app\models\Consultation' => [
        'date' => function ($model) {
             return \Yii::$app->formatter->asDate($model->created_at, 'short');
        },
        'date2' => 'shortDate' //это вариант если геттер есть, который выше описал
    ],
]);
\Yii::$app->response->format = Response::FORMAT_JSON;
return $data


Почитушки на тему:
www.yiiframework.com/doc-2.0/yii-i18n-formatter.html
www.yiiframework.com/doc-2.0/guide-output-formatti...
www.yiiframework.com/doc-2.0/guide-helper-array.html
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы