Laravel 4 带约束的Laravel ORM嵌套关系

Laravel 4 带约束的Laravel ORM嵌套关系,laravel-4,nested,relationships,Laravel 4,Nested,Relationships,我想知道如何在Laravel4.1中执行带约束的嵌套关系查询 下面是一个有效的参考查询: $users = User::with("careers.specialty.faculty.university")->get(); 如您所见,有几个嵌套模型(具有各种关系类型) 我想加载一个可选的约束到一个或几个模型,例如一个教员姓名 实现这一目标的最佳(最简单)方法是什么 这是我到目前为止所尝试的,但似乎没有考虑到约束(所有用户都返回) 编辑:这是一个解决方案,感谢Maksym Cierzn

我想知道如何在Laravel4.1中执行带约束的嵌套关系查询

下面是一个有效的参考查询:

$users = User::with("careers.specialty.faculty.university")->get();
如您所见,有几个嵌套模型(具有各种关系类型)

我想加载一个可选的约束到一个或几个模型,例如一个教员姓名

实现这一目标的最佳(最简单)方法是什么

这是我到目前为止所尝试的,但似乎没有考虑到约束(所有用户都返回)


编辑:这是一个解决方案,感谢Maksym Cierzniak的公认答案:

$users = User::whereHas('promos',function($q)use($levelInput,$specialtyInput,$facultyInput,$universityInput){
        $q->where('level','like','%'.$levelInput.'%')->whereHas('specialty',function($q)use($specialtyInput,$facultyInput,$universityInput){
            $q->where('name','like','%'.$specialtyInput.'%')->whereHas('faculty',function($q)use($facultyInput,$universityInput){
                $q->where('name','like','%'.$facultyInput.'%')->whereHas('universities',function($q)use($universityInput){
                    $q->where('name','like','%'.$universityInput.'%');
                });
            });
        });
    })->get();

这个代码看起来很难看。但是它是有效的,如果您有更好的选择,请随意分享:)

使用的
就是这样工作的,因此关系会被急切地加载到您正在寻找的基本模型中。在这种情况下,您将始终获取所有
User
记录,然后Laravel将尝试获取所有记录的关系。如果您想加载所有关系具有某种约束的用户,您应该尝试
whereHas
方法。例如,如果你打电话

$posts = Blog::whereHas('comments', function($query){
   $query->where('content', 'like', 'foo%');
})->get();
这样你只会得到
博客
,它有一些类似foo的
内容的评论。我希望这就是你要找的

$posts = Blog::whereHas('comments', function($query){
   $query->where('content', 'like', 'foo%');
})->get();