我正在使用Laravel 4.1.x并且我在标签和照片之间有很多和很多关系(照片属于许多标签,标签属于许多照片)。我正在使用带有tag_id和photo_id
的数据透视表我知道如何使用以下方法对标签进行分页:
Tag::paginate($limit);
我可以使用以下方法获取包含所有相关照片的一个标签:
Tag::find($id);
但我现在要做的是检索属于标签的所有照片,但将它们分页。所以,它就像我展示的第二个代码,但有一个页面和限制参数。
例如,我想查看属于标签的前15张照片,其中id = 1,然后可以选择第二张照片。
更新
根据提供的答案,我尝试使用->photos()->paginate()
,但是使用它,它不会返回标签中的其他信息(名称,描述等)。
我已经能够使用:
$tag = Tag::findOrFail($id)->toArray();
$tag['photos'] = Tag::findOrFail($id)->photos()->paginate($limit)->toArray();
但是我不确定是否还有其他方法可以做到这一点,如果这会产生额外的查询。
答案 0 :(得分:2)
你试过......
Tag::find(1)->photos()->paginate(15);
如果您需要显示标签上的信息,有几种方法。渴望加载通常是最好的,但在这种情况下,因为我们知道标签ID,我们没有遇到n + 1问题所以它可能看起来比它需要的更混乱。
$limit = 15;
$tag = Tag::with(array('photos' => function($q) use ($limit)
{
$q->paginate($limit);
}))->find(1);
// Use
echo $tag->name;
foreach($tag->photos as $photo) {
echo $photo->description;
}
或者你可以做我们之前做过的事情,除了将它分开以保存单个部分。
$tag = Tag::find(1);
$photos = $tag->photos()->paginate(15);
// use
echo $tag->name;
foreach($photos as $photo) {
echo $photo->description;
}