使用了集合中的分页,排序。resource返回数据格式错误

1. 运行环境

apache windows .

1). 当前使用的 Laravel 版本?

laravel:6.0.4
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.3.4

php-fpm 版本:

3). 当前系统

window10
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )

4). 业务环境

5). 相关软件版本

2. 问题描述?

使用了laravel集合,原本返回数据是正常格式,加了一个排序后返回的数据格式不对。

使用了集合中的分页,排序。经我的打印排除可以确定当加了排序下一步的指向resource返回的数据格式如2图,如不加排序返回数据格式如3图

使用了集合中的分页,排序。resource返回数据格式错误

使用了集合中的分页,排序。resource返回数据格式错误

3. 您期望得到的结果?

如3图数据格式并data中的数据实现排序
//: <> (能截图就截图。)

4. 您实际得到的结果?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13
gongmeng

file

可以参考一下我的

1年前 评论
ljy_ong (楼主) 1年前

在 Laravel 中,使用 orderBy 方法对查询结果进行排序时,调用顺序需要考虑到排序操作的实际需求,通常需要在 paginateFilter 方法之前进行排序操作。

这是因为 paginateFilter 方法在对查询结果进行分页和过滤时,会对查询语句进行修改,以适应分页和过滤的需求。如果在 paginateFilter 方法之后再进行排序操作,可能会导致排序结果不符合预期,因为 paginateFilter 方法已经对查询语句进行了修改。

例如,以下代码展示了一个正确的 orderBy 方法的调用示例:

$users = User::where('age', '>', 18)
             ->orWhere('gender', 'female')
             ->orderBy('name')
             ->paginateFilter($request->all())
             ->get();

在这个例子中,首先对 User 模型进行了查询并使用 where 和 orWhere 方法对查询条件进行了筛选,接着使用 orderBy 方法对查询结果进行了排序,然后使用 paginateFilter 方法对查询结果进行了分页和过滤,并传入了分页参数,最后使用 get 方法获取查询结果。

需要注意的是,如果排序操作需要在分页和过滤操作之后进行,可以考虑使用 sort 方法对集合进行排序,而不是在查询构建器中使用 orderBy 方法。

1年前 评论
ljy_ong (楼主) 1年前
wxfjamdc (作者) 1年前

Resource 会根据 数据源是否实现了 AbstractPaginator 接口,返回不同的响应数据, sortBy后,数据源的类型已经变了

file

1年前 评论
ljy_ong (楼主) 1年前

问题已经解决,写了两个方法,一种是db数据库,先排序再分页。可以实现。但是并没有用到集合就很鸡肋,后又请教了大佬写出了集合。经过测试发现排序在第一页是正常的,第二页是有的时间会比第一页的时间还要大,结果没有排在第一页。索性这里我就不用集合来写了。代码我贴出来,大家可以参考并回答下为什么第二页的时间会比第一页的时间还要大却在第二页没有在第一页。谢谢~

1年前 评论

你这个应该是返回的结果类变了。

可以这样:

// 这里的 $list 就是你通过 paginate() 查询出的内容
$list = new LengthAwarePaginator();

// 这里是你的排序逻辑
$items = $list->collect()->sortByDesc('created_at')->values();

// 这里是将排序后的逻辑重新赋回的逻辑
$list->setCollection($items);
1年前 评论
ljy_ong (楼主) 1年前

file

1年前 评论
ljy_ong (作者) (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!