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

时间:2016-08-14 16:19:28

标签: php laravel laravel-5.1

users有多个restaurants,然后每个restaurant都有comments

因此,当user登录时,我希望显示与用户相关的comments的所有restaurants列表。

我正在使用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,我想我不会这样做。

3 个答案:

答案 0 :(得分:2)

你有没有尝试过多次通过?
在用户模型中      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

答案 1 :(得分:0)

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

因此,要创建需要使用的集合:->get();

在我的例子中:

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

注意:paginate函数必须去,它不是laravel的方法Collection

答案 2 :(得分:0)

你几乎是对的,你应该做的

$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()