我使用的是Laravel 4.1。x和我在标签和照片之间有一个有很多和属于很多的关系(一张照片属于很多标签,一个标签属于很多照片)。我使用tag_id和photo_id的数据透视表
我知道如何分页标签,使用:
Tag::paginate($limit);
我可以使用
获取一个包含所有相关照片的标签Tag::find($id);
但是我现在要做的是,检索属于一个标签的所有照片,并对它们进行分页。它类似于我展示的第二个代码,但是有一个page和limit参数。
例如,我希望看到属于id=1的标签的前15张照片,然后能够选择后15张照片。
更新:根据提供的答案,我尝试了->photos()->paginate()
,但是使用这个,它不会返回标签(名称,描述等)的其余信息。
我已经能够得到一切使用:
$tag = Tag::findOrFail($id)->toArray();
$tag['photos'] = Tag::findOrFail($id)->photos()->paginate($limit)->toArray();
但我不确定是否有任何其他方法来做到这一点,如果这是生成一个额外的查询
你试过吗?
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;
}