我使用雄辩并试图建立我最能描述为动态关系的东西。
我有Student
模型可以在Course
:博士,硕士,学士,基础或ESL,学生可以有针对每门课程的报告,因此我有以下雄辩模型:PhdReport
,MasterReport
,BachelorReport
,FoundationReport
或EslReport
。
我需要的一个这样的关系是获得学生当前课程的最新报告。因此,如果学生参加本科课程,我想抓住BachelorReport
模型,其中date_to
属性是最新的。这是我在Student
关系模型上的实现:
public function latestReport()
{
$courseReport = ucfirst(strtolower($this->course->name)) . 'Report';
return $this->hasOne('\App\Models\\' . $courseReport)->latest('date_to');
}
当我在artisan tinker
中运行以下代码时,此关系正常工作:
// get a student
$student = App\Models\Student::first();
// student returned
=> <App\Models\Student #000000003dd8f51b00000000d869fe64> {
course_id: 2, /* which is the master course */
// other attributes ...
}
// get the latest report for the student's current course
$s->latestReport
// we get a MasterReport as expected
=> <App\Models\MasterReport #000000003dd8f51900000000d869fe64> {
// attributes
}
但是,当我运行以下代码时:
$students = $this->student
->whgere('course', 2) /* for masters */
->where('is_active', '1')
->with('latestReport', /* other relationships */)
->get();
似乎总是运行PhdReport
的代码,当我检查Laravel调试栏时会显示
select * from `phd_reports`
where `phd_reports`.`student_id` in (/* list of ids */)
order by `date_to` desc
非常感谢任何建议。谢谢!