Я пишу приложение Laravel, которое управляет учебными курсами.
Каждый курс представлен моделью курса.
Курс может иметь много дат - они представлены моделью CourseDate,с отношением hasMany между ними:
Каждый курс также имеет один «шаблон даты», который является CourseDate, но с логическим набором «is_template».
Я хочу создатьметод доступа к модели курса, который получает шаблон даты.
(соответствующий) код для каждой модели:
class Course extends Model {
public function getDateTemplateAttribute() {
$dates = $this->dates;
$filtered = $dates->where('is_template', true);
$template = $filtered->first();
return $template;
}
public function dates() {
$result = $this->hasMany( CourseDate::class );
return $result;
}
}
class CourseDate extends Model {
public function course() {
return $this->belongsTo( Course::class );
}
}
Затем в контроллере у меня есть следующее:
// this block works absolutely perfectly
$course = Course::find(1);
$dates = $course->dates;
$working_date_template = $dates->where('is_template', true)->first();
// this one doesn't work at all and says "call to a member function first() on array"
$broken_date_template = $course->date_template;
Проходя через xdebug в неработающем коде, строка $dates = $this->dates
возвращает пустой массив, поэтому все остальное впоследствии прерывается.
Это ограничение системы доступа / отношений Laravel?Или я просто тупой и делаю что-то не так.