laravel中多重关系的条件

时间:2016-09-12 11:13:34

标签: php laravel laravel-5

我在数据库中有三个表(即Post,Comment,Like)。我想用评论和喜欢来获取这些帖子。但只有那些用户评论或喜欢的帖子。如果用户没有评论或喜欢,则不应提取帖子。我知道如何在单独的关系上获取具有条件的数据。但我无法理解如何在关系中用OR来表达条件。如果有人知道答案,我们将不胜感激。

这是关于个人关系的条件的代码。

$this->posts = Post::with(['comments', 'votes']);
if($field == 'comments') {
    $this->posts->whereHas('comments', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
} else if ($field == 'votes') {
    $this->posts->whereHas('votes', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
} else if($field == 'both') {
    // Here I want help
}

1 个答案:

答案 0 :(得分:0)

好的,这是我错误的焦点。我只关注$query->where()。但这很简单。我只需将whereHas()更改为orWhereHas()即可获得投票。

这是更新(解决方案)代码。

$this->posts = Post::with(['comments', 'votes']);
if($field == 'comments') {
    $this->posts->whereHas('comments', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
} else if ($field == 'votes') {
    $this->posts->whereHas('votes', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
} else if($field == 'both') {
    $this->posts->whereHas('comments', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
    $this->posts->orWhereHas('votes', function($query)
        {
            $query->where('in_user_id', Auth::user()->in_user_id);
        });
}