laravel得到的get数据后,如何再次筛选?

比如我先从数据库找到time小于等于当前时间戳的数据
$data = DB::table(‘test’)->where(‘time’,’<=’,time())->get();
得到很多数据
然后我想从这些数据里面找到某个时间戳的数据,如何有则返回,没有就返回空数组?
可以做到么,主要是我不想请求太多数据库,耗时间。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11
slowlyo
// 查询结果可以调用集合方法~

// filter 闭包内返回 true 会保留数据, false 则会排除数据~
$data->filter(fn ($item) => $item->time == $someTime);
// 或者
$data->where('time', $someTime);
6个月前 评论

get 得到的结果是 Collection 依然可以使用 where 来实现过滤,只不过是在 PHP 层过滤的,而不是 数据库层过滤的!

参考集合的可用方法之 where

6个月前 评论
slowlyo 6个月前
donggan (楼主) 6个月前

这种东西直接进行foreach其实也还好呀。处理数组不会太慢

6个月前 评论
 $data->where('time','<=',$timestamp)->sortByDesc('time')->first();
6个月前 评论
porygonCN

评论中已经给到了方法 foreach或者where继续查询,但是我有点不理解的是 主要是我不想请求太多数据库,耗时间根据经验来看 collection的性能并不高 可能你操作collection时, mysql早就查出来了 query构建的sql语句 mysql执行是很快的 除非存在N+1得情况

6个月前 评论
douresources 6个月前

先查小于的 再从这个集合里找匹配某个值的 那为什么不一开始就从数据库查某个值的。。

6个月前 评论

查询到的集合可以使用where查询条件再次进行查询,语法和数据库查询一样,并且不消耗数据库资源,集合本身的查询是在php里进行的。

6个月前 评论

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