我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
,我想我不会这样做。
答案 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()