У меня есть две модели - Месяц и Расписание.
- В классе
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;
}