Laravel 关系 manytomany 分页问题

Laravel relationship manytomany paginate issue

我有 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()

我不明白为什么我不能对此进行分页,而我可以对所有其他查询进行分页。

如果您调用 eloquent 关系作为属性 User::find(Auth::user()->id)->articles 它将自动执行 SQL 和 return 集合。错误是告诉你你有一个集合,你不能调用 paginate() 。

如果要引用关系以添加更多语句,则需要将其作为函数调用 User::find(Auth::user()->id)->articles()。这将 return 一个 QueryBuilder 实例,您可以向其添加语句,and/or 分页。

所以这应该有效:

$articles = User::find(Auth::user()->id)->articles()->paginate(20);