我正在开发一个项目并使用Laravel 5.3,我在访问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');
}
On Posts modal -
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()
我再次可以访问任何用户制作的喜欢和不喜欢,因为我在用户模式上有访问这些的方法,我会在我的模型中做这样的事情
Auth::user()->likes->count();
Auth::user()->dislikes->count();
但我希望以数字格式显示总评论,回复,喜欢和不喜欢的帖子总数。 你能帮助我了解如何通过关系来访问这些内容。
答案 0 :(得分:0)
简短而简单的答案是:向后工作。
Dislike::whereHas('posts', function($q) {
return $q->where('user_id', $this->id);
});
现在,您将对所有帖子中的特定用户产生所有不喜欢的内容。
答案 1 :(得分:0)
您可以使用with
语句来使用Eloquent关系,如下所示
在用户控制器中
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
}