php - Laravel:将动态范围与

标签 php laravel eloquent eager-loading

我正在尝试在 Laravel 4.2 中加载动态范围

我有以下 Eloquent 类(class):

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 只接受要加载的关系列表。我似乎找不到任何关于我应该如何急切加载带有参数的作用域的指示。 :-(

最佳答案

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

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

这就是你想要的:

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

关于php - Laravel:将动态范围与,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287205/

相关文章:

javascript - 自动点击图像中的特定区域

php - 如何覆盖 Wordpress 确定 .current-menu-item 类的默认方式?

laravel - 用 Eloquent 快速加载

php - 获取操作系统信息

php - 跨应用程序处理自然 JOINed 结果的良好实践

laravel - 创建可用的搜索以进行过滤

php - Laravel - php artisan 看什么 :clear do?

javascript - Laravel 5.1 - 自定义按钮 STRIPE 支付

mysql - 如何返回商店评论大于或等于输入的所有商品 - Laravel 5.2

join - Laravel 4 Eloquent Query Builder - 复杂的变量连接