动态雄辩的关系

时间:2016-01-04 15:51:58

标签: php laravel orm eloquent relationships

我使用雄辩并试图建立我最能描述为动态关系的东西。

我有Student模型可以在Course:博士,硕士,学士,基础或ESL,学生可以有针对每门课程的报告,因此我有以下雄辩模型:PhdReportMasterReportBachelorReportFoundationReportEslReport

我需要的一个这样的关系是获得学生当前课程的最新报告。因此,如果学生参加本科课程,我想抓住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

非常感谢任何建议。谢谢!

0 个答案:

没有答案