如何用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();
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6
where('time', 'like', '%' . $query)
//如果只查时间这么写就全表扫描了,很影响性能
where('time', 'like', $query)
//time列加索引,这么写可以用到索引,性能有一定提升

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

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

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

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

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

1年前 评论

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

1年前 评论

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