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

目录
相关文章
|
4天前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
1月前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
1月前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
30 6
|
2月前
|
SQL 数据库
GBase8a 数据库集群v953扩容案例问题分享
GBase8a 数据库集群v953扩容案例问题分享
|
2月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
2月前
|
存储 SQL 数据库
Sybase数据恢复—Sybase数据库常见问题之数据库无法启动的恢复案例
Sybase数据库数据恢复环境: Sybase数据库版本:SQL Anywhere 8.0。 Sybase数据库故障&分析: Sybase数据库无法启动。 使用Sybase Central连接报错。 数据库数据恢复工程师经过检测,发现Sybase数据库出现故障的原因是:异常断电造成Sybase数据库无法回写正常数据,导致多个存储页数据不一致,系统表描述和存储表不一致,部分存储页底层数据完全杂乱。
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
1月前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
35 0
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。