Laravel关系manytomany paginate问题

时间:2015-07-15 01:10:32

标签: php laravel pagination

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

我无法弄清楚为什么我可以对此进行分页,就像我可以解决所有其他问题一样。

1 个答案:

答案 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()