Laravel - 渴望加载Eloquent模型的方法(不是关系)

Deb*_*sad 5 php laravel eloquent laravel-5

就像我们可以急切地加载一个Eloquent模型的关系一样,有没有办法急于加载一个不是Eloquent模型的关系方法的方法?

例如,我有一个Eloquent模型GradeReport,它有以下方法:

public function totalScore()
{
    return $scores = DB::table('grade_report_scores')->where('grade_report_id', $this->id)->sum('score');
}
Run Code Online (Sandbox Code Playgroud)

现在我收集了一些GradeReportEloquent模型.

$gradeReports = GradeReport::where('student_id', $studentId)->get();
Run Code Online (Sandbox Code Playgroud)

如何在集合中totalScore为所有GradeReportEloquent模型加载方法的返回值?

jed*_*ylo 7

您可以通过将任意属性添加到$ appends数组并提供getter 来模型添加任意属性.在你的情况下,以下应该做的伎俩:

class GradeReport extends Model {
  protected $appends = ['totalScore'];

  public function getTotalScoreAttribute() {
    return $scores = DB::table('grade_report_scores')->where('grade_report_id', $this->id)->sum('score');
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,从控制器返回的所有GradeReport对象都将设置totalScore属性.

  • 它可以解决问题,但不是急于加载,每次访问此模型属性时,都会调用DB (3认同)