如何通过laravel上的连接记录分页



我使用的是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;
}

最新更新