如何用filter筛选出指定的月份呢?

time字段里存是的2022-05这种包含月份的数据,我现在要怎么处理一下,可以只筛选年份呢?

$company_powers = QueryBuilder::for($query)
            ->allowedIncludes('user')
            ->allowedFilters([
                'time',
                AllowedFilter::scope('withOrder')->default('recent'),
            ])
            ->paginate();

如下这么写是不是很费资源:

$company_powers = QueryBuilder::for($query)
            ->allowedIncludes('user')
            ->allowedFilters([
                where('time', 'like', '%' . $query),
                AllowedFilter::scope('withOrder')->default('recent'),
            ])
            ->paginate();
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 6
lchola
where('time', 'like', '%' . $query)
//如果只查时间这么写就全表扫描了,很影响性能
where('time', 'like', $query)
//time列加索引,这么写可以用到索引,性能有一定提升

数据量大并且时间查询很多的话,最好是存一个timestamp|datetime字段并加索引,展示的时候转换下,查也好查

2周前 评论
wongvio (楼主) 2周前

我用的是增加年月日三个字段 并且建一个组合索引

$query->where('_year', 2022)->where('_month',5)
2周前 评论

直接一个wereIn('time',['2022-01','2022-02',...])

2周前 评论

$query->whereYear('time', '2022')->whereMonth('time','05')->get()

2周前 评论

select中使用from_unixtime(时间字段,'%Y-%m') as time 转换为年月或者为 from_unixtime(时间字段,'%m') as time 然后group查询就行了

2周前 评论

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