如果我使用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()获取方法对数据进行排序?
答案 0 :(得分:1)
您无法在sort
对象上使用Illuminate\Pagination\Paginator
,但您可以使用take
和offset
从特定偏移量中获取特定的记录数量,例如:
$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
)。