从多个相关记录中获取一组相关记录laravel?

Get a set of related records from multiple related records laravel?

我有 users 有多个 restaurants,然后每个 restaurantcomments

所以当 user 登录时,我想显示 restaurants 中与该用户相关的所有 comments 的列表。

我正在使用laravel 5.1

我目前拥有的是:

$restaurants = $user->restaurants;
        $comments = null;
        foreach ($restaurants as $restaurant) {
            if (!$comments){
              $comments = $restaurants->comments();
            } else{
              $comments = $comments->merge($restaurant->comments());
            }
        }

        $rows = $comments->paginate(15);
        $count = $comments->count();

我收到 BadMethodCallException,我想我没有按照 laravel 的方式来做。

我刚找到答案,要使用 merge 数据集需要 collection

所以要创建您需要使用的集合:->get();

在我的例子中:

$comments = $restaurants->comments()->get();

注意:分页功能必须去,它不是 laravel Collection

的方法

你试过有很多通过吗?
在用户模型中 public function user_posts() { return $this->hasManyThrough('App\Comment', 'App\Restaurant'); } 并且在控制器中你可以轻松访问评论 $comments = $user->user_posts(); 此处有更多详细信息:https://laravel.com/docs/5.1/eloquent-relationships#has-many-through

你几乎是正确的,你应该做的

$restaurant->comments
// gives you objects

而不是

$restaurant->comments()
// gives you query builder
// $restaurants->comments()->get() would also work as someone mentioned

至于分页你可以做

$restaurants->comments()->paginate(15)

而不是

$restaurants->comments()->get()