访问laravel关系

时间:2017-01-16 04:36:41

标签: php laravel laravel-5.3

我正在开发一个项目并使用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();

但我希望以数字格式显示总评论,回复,喜欢和不喜欢的帖子总数。 你能帮助我了解如何通过关系来访问这些内容。

2 个答案:

答案 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
  }