【问题标题】:Laravel: Combine dynamic scope and withLaravel:结合动态范围和与
【发布时间】:2014-10-09 20:15:12
【问题描述】:

我正在尝试在 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 只接受要加载的关系列表。我似乎找不到任何关于我应该如何预先加载带参数的范围的迹象。 :-(

【问题讨论】:

    标签: php laravel eloquent eager-loading


    【解决方案1】:

    在急切/延迟加载时,除了关系之外,您不会传递任何其他内容。

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

    这就是你想要的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 2016-12-17
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多