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

目录
相关文章
|
30天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
99 6
|
30天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
262 0
|
2月前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
46 6
|
2月前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
46 0
|
3月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
26天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
12天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
91 42
|
3天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
47 25
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
73 3
|
2月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
125 3

热门文章

最新文章