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