我有3个表/模型
User (has an id)
Articles (has an id )
UserArticles (has an id, article_id and user_id)
我对如何设置关系感到有点困惑,以便我能够将所有文章连接到用户,这样我就可以在我的控制器中设置这样的调用:
$articles = User::find(Auth::user()->id)->articles->paginate(20);
我认为这是一个很多人的关系,所以我在用户模型中玩这个代码:
public function articles()
{
return $this->belongsToMany('App\Article', 'user_saved_articles', 'user_id', 'article_id');
}
现在这样可行,只要我不在控制器功能上调用paginate(),我就想在上面使用它。这是我现在的真正问题所在,所以它适用于
$articles = User::find(Auth::user()->id)->articles;
但有了这个:
$articles = User::find(Auth::user()->id)->articles->paginate(20);
它出现了错误:
FatalErrorException in UserController.php line 217:
Call to undefined method Illuminate\Database\Eloquent\Collection::paginate()
我无法弄清楚为什么我可以对此进行分页,就像我可以解决所有其他问题一样。
答案 0 :(得分:2)
如果您将一个雄辩的关系称为属性<body>
<h1> Static Text </h1>
<p> <include href="snippets/dynamic.txt" /> </p>
</body>
,它将自动执行SQL,并返回一个Collection。错误告诉您有一个Collection,您无法调用paginate()。
如果要引用关系以添加更多语句,则需要将其称为函数User::find(Auth::user()->id)->articles
。这将返回一个QueryBuilder实例,您可以将语句添加到和/或分页。
所以这应该有效:
User::find(Auth::user()->id)->articles()