Laravel:结合动态范围和

时间:2014-10-09 20:15:13

标签: php laravel eloquent eager-loading

我正试图在Laravel 4.2中急切加载动态范围

我有以下Eloquent课程:

class Project extends Eloquent {

    protected $table = 'projects';

    public function subProjects() {
        return $this->hasMany('SubProject');
    }
}

Subproject课程中,我有以下动态范围:

public function scopeForUserInPeriod($query, $user, $interval) {
  return $query->whereHas('hourRegistrations', function($query) use($user, $interval) {
    $query->where('user_id', $user->id)->whereBetween('date', [$interval->from, $interval->to]);
  });
}

现在我想在加载项目时加载范围,所以我做了类似的事情。

Project::with('SubProjects.ForUserInPeriod', $user, $period);

不幸的是,with只接受要加载的关系列表。我似乎无法找到关于我应该如何加载带有参数的范围的任何迹象。 : - (

1 个答案:

答案 0 :(得分:2)

在急切/延迟加载时,你不会传递任何其他内容,而是传递关系。

使用点来表示嵌套关系,而不是查询上的方法。

这就是你想要的:

Project::with(['subProjects' => function ($q) use ($user, $period) {
 $q->forUserInPeriod($user, $period);
}])->get();