2017-01-16 68 views
0

我正在开发一个项目并使用Laravel 5.3,在访问laravel关系时遇到了一些问题。
就像我已经设置了这些关系 -
在用户模式 ​​-访问laravel关系

public function likes() { 
    return $this->hasMany(Like::class, 'user_id'); 
} 

public function dislikes() { 
    return $this->hasMany(Dislike::class, 'user_id'); 
} 

public function posts() { 
    return $this->hasMany(Post::class); 
} 

public function comments() { 
    return $this->hasMany(Comment::class); 
} 

public function replies() { 
    return $this->belongsTo(Comment::class, 'parent_id'); 
} 

在帖子模态 -

public function likes() { 
    return $this->morphMany(Like::class,'likeable'); 
} 

public function dislikes() { 
    return $this->morphMany(Dislike::class, 'dislikeable'); 
} 

public function comments() { 
    return $this->hasMany(Comment::class); 
} 

public function user() { 
    return $this->belongsTo(User::class); 
} 

现在,这里是我的问题。假设有一个用户有10个帖子,每个人有20个喜欢和10个不喜欢,那么我如何在他的帖子中显示出喜欢和不喜欢的人与人之间的关系,我知道如何在每个帖子中查看喜欢和不喜欢的东西 -

$post->likes->count() 
$post->dislikes->count() 

我又可以访问任何用户所做的好恶,因为我有方法上的用户模式来访问这些,我会做这样的事情在我的模型

但我想以数字格式显示总评论数,总评论数,回复数,喜好和不喜欢数。 你能帮助我如何通过关系来访问那些人吗?

回答

0

简单而简单的答案是:反向工作。

Dislike::whereHas('posts', function($q) { 
    return $q->where('user_id', $this->id); 
}); 

现在,您将对所有帖子中的特定用户产生所有不满。

0

您可以使用with语句中使用雄辩的关系,如下面

在用户控制器

User:: with(['posts'])->get(); //this with will fetch the user with all the posts and post likes/dislikes 

在用户模型

public function posts() { 
     return $this->hasMany(Post::class)->with(['likes','dislikes']); //this will join likes and disliks based on the relation given in post model 
    } 

在桩模型

public function likes() { 
    return $this->hasMany(Like::class,'likeable'); //relation of post with likes 
    } 



public function dislikes() { 
    return $this->hasMany(Dislike::class, 'dislikeable'); //relation of post with dislikes 
    }