laravel-admin 查询过滤时间戳(数据库使用int类型)不起作用案例复现及解决办法

简介: laravel-admin 查询过滤时间戳(数据库使用int类型)不起作用案例复现及解决办法

今天在使用laravel-admin做查询过滤的过程中,有个查询条件是时间范围查询:想到使用laravel-admin查询过滤器中的between方法来实现,代码如下:

$grid->filter(function ($filter) {
    $filter->between('create_time', '创建时间')->datetime();
});

但是查询不起任何作用,细想原因应该是:laravel-admin没有把时间转换为时间戳导致查询不到数据。

image.png

查询官方文档,发现并没有相关支持,经过一番百度+Google,最终在laravel-admin项目github的issue中找到了该问题的解决办法:数据表存储的时间用的int类型时,按时间范围搜索查询过滤要如何使用?

具体解决办法如下

自定义一个过滤器类,并继承\Encore\Admin\Grid\Filter\Between:

<?php
namespace App\Admin\Filters;
use Encore\Admin\Grid\Filter\Between;
class TimestampBetween extends Between
{
    public function condition($inputs)
    {
        // $inputs即为传进来的参数,格式化成timestamp再去构建条件
        if (!array_has($inputs, $this->column)) {
            return;
        }
        $this->value = array_get($inputs, $this->column);
        $value = array_filter($this->value, function ($val) {
            return $val !== '';
        });
        if (empty($value)) {
            return;
        }
        if (!isset($value['start'])) {
            $value['end'] = strtotime($value['end']);//转成时间戳
            return $this->buildCondition($this->column, '<=', $value['end']);
        }
        if (!isset($value['end'])) {
            $value['start'] = strtotime($value['start']);//转成时间戳
            return $this->buildCondition($this->column, '>=', $value['start']);
        }
        $this->query = 'whereBetween';
        $value['end'] = strtotime($value['end']);//转成时间戳
        $value['start'] = strtotime($value['start']);//转成时间戳
        //return $this->buildCondition($this->column, $this->value);
        //这里需要注意$this->value的值会作用于页面reset按钮,不能直接修改这个值,否则会导致按reset回显时间戳
        return $this->buildCondition($this->column, $value);
    }
}

然后在使用过滤器时直接使用就OK

$grid->filter(function ($filter) {
    $filter->use(new TimestampBetween('create_time', '创建时间'))->datetime();
});

成功查询

2019040111385767.png

目录
相关文章
|
10月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
892 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
12月前
|
Cloud Native 关系型数据库 分布式数据库
|
12月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
484 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1167 152
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
895 156
|
7月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
496 156

热门文章

最新文章