使用paginate()的sort()方法运行但什么都不做

时间:2014-04-07 18:17:30

标签: sorting laravel laravel-4

如果我使用get()获取方法查询我的雄辩模型,我可以使用sort()来重新排列我的集合。如果我只是从get()切换到paginate(10),那么排序就会停止工作。在两种情况下,Laravel确实运行了我的用户定义函数,但是没有在paginate()情况下应用排序结果。如果它运行该功能,为什么我没有将我的结果排序?

示例:

$data = MyModel::with('other_model').get();
$data->sort(function($a, $b)
{
    if($a->other_model->field == $b->other_model->field) return 0;
    return $a->other_model->field > $b->other_model->field 1 : -1;
});
dd($data->toArray());

我的$ data集合现在根据我的功能排序。现在,如果我只是将它从get()更改为paginate(),则不会发生错误,函数会使用正确的值运行几次,最后排序的值似乎被忽略。没错!!!

$data = MyModel::with('other_model').paginate(10); // <- HERE
$data->sort(function($a, $b)
{
    if($a->other_model->field == $b->other_model->field) return 0;
    return $a->other_model->field > $b->other_model->field 1 : -1;
});
dd($data->toArray());

据我所知,在第二个例子中,我得到的是一个paginator模型而不是直接集合。但是我认为paginator包含了一个集合。

我不是在寻找一种解决方法,我只是想现在,如果我可以根据paginate()获取方法对数据进行排序?

1 个答案:

答案 0 :(得分:1)

您无法在sort对象上使用Illuminate\Pagination\Paginator,但您可以使用takeoffset从特定偏移量中获取特定的记录数量,例如:

$myModels = MyModel::with('other_model')->take(10)->offset(5)->get();

这将从10记录中选择6th条记录,因此,您可以在sort上使用$data,然后您可以使用以下内容手动构建分页链接:

$data = Paginator::make($myModels->toArray(), $post->count(), 5);

所以,你可以在你的视图中使用这样的东西:

$data->links();

检查Pagination班级(Creating A Paginator Manually)。