2014-10-09 119 views
2

我想急于负载Laravel动态范围4.2Laravel:结合的动态范围,并与

我有以下雄辩类:

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只接受要加载的关系列表。我似乎无法找到任何迹象表明我应该如何抢占有争议的范围。 :-(

回答

2

不传递任何东西,但关系在渴望/延迟加载

你用点来表示嵌套关系,对查询不是方法

这是你想要的。:

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