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

时间:2014-06-26 21:05:25

标签: php laravel orm pagination eloquent

我正在使用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();

但是我不确定是否还有其他方法可以做到这一点,如果这会产生额外的查询。

1 个答案:

答案 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;
}