Yii2 - получить вычисляемый атрибут в реляционной модели - PullRequest
0 голосов
/ 01 мая 2020

У меня есть две модели - Месяц и Расписание.

  • В классе Month У меня есть атрибуты: id и name.
  • В классе Schedule У меня есть атрибуты: id, month_id и day_no

Вот отношение один ко многим в классе Month:

class Month extends \yii\db\ActiveRecord
{
    public function getSchedules()
    {
        return $this->hasMany(Schedule::className(), ['month_id' => 'id']);
    }
}

В классе Schedule У меня есть виртуальный атрибут с именем day_name - это атрибут, который я хочу вычислить.

Я хочу вывести Schedule для данного Month, и я хочу, чтобы атрибут day_name быть включены в набор результатов. Для вычисления атрибута day_name у меня есть эта функция в классе Schedule:

public function getDayNameFromDate($year)
{
    $value = $this->day_no . ' ' . $this->month_id . ' ' . $year;

    $datetime = \DateTime::createFromFormat('j n Y', $value);

    return $datetime->format('D');
}

Итак, мой вопрос, как я могу передать значение year, когда я вызываю отношение getSchedules и затем использовать это значение в моей getDayNameFromDate() функции?

Код контроллера:

$month = Month::findOne($id);
$schedules = $month->schedules;

foreach ($schedules as $day) {
    echo $day->day_name; // my virtual attribute
}

Я планирую использовать afterFind() для назначения day_name следующим образом:

public function afterFind()
{
    parent::afterFind();

    $this->day_name = $this->getDayNameFromDate($year);

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...