laravel ORM关系:使用条件加入联接

时间:2016-12-13 16:56:44

标签: php laravel orm laravel-5.2

我尝试使用ORM关系加入两个表postcomment

$posts = Post::with('comments')->get(); 

使用with连接表时,如何在注释中使用条件?

我可以使用whereHas like

$posts = Post::whereHas('comments', function ($query) {
    if(isset($_GET['title']))
    $query->where('title', $_GET['title']);
})->get();

但是当我使用whereHas时,我不会在结果中没有任何评论的情况下收到帖子

基本上我想在右表中使用带有条件的左连接

2 个答案:

答案 0 :(得分:2)

您可以将闭包传递给with()方法,如下所示:

$posts = Post::with(['comments' => function($q) {
    $q->where('column', '=', 'value'); // Put conditions here
}])->get();

希望这有帮助!

答案 1 :(得分:0)

您需要使用闭包:

$title = $_GET['title'];
$posts = Post::whereHas('comments', function ($query) use ($title) {
    if(!empty($title)) {
        $query->where('title', $_GET['title']);
    }
})->get();

参考:

In PHP 5.3.0, what is the function "use" identifier?